解決済み

VB6変数の宣言dim j,k,p,m,n as Integerは良くない?

  • 暇なときにでも
  • 質問No.971027
  • 閲覧数1579
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 75% (59/78)

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 52% (57/109)

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。
お礼コメント
jojo_dio

お礼率 75% (59/78)

スコープはローカル関数範囲内でFor~Nextのカウンタや一時的に代入する文字列変数ぐらいなので致命的な心配はないはず。です。

以後、気をつけます。

ありがとうございました。
投稿日時 - 2004-08-24 01:12:24
感謝経済

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 50% (1/2)

#1さんのおっしゃるとおり、特に問題ないとは思います。
ですが画面上から入力された値で加算処理を行った場合、処理結果が文字列結合となってしまう場合があります。
その点だけは注意した方がいいかもしれません。

フォームに、ボタンとテキストボックスを貼り付けて下のソースを実行していただけると、結果が文字列結合になっているのが分かります。

Private Sub Command1_Click()

Dim a, b, c As Integer

a = Text1.Text
b = Text1.Text
c = 0

MsgBox a + b + c

End Sub

<開発環境>
WinXP pro sp1
VB6.0 sp5
お礼コメント
jojo_dio

お礼率 75% (59/78)

自由が利くといぅか、あんまり好ましくないですね。
以後、気をつけます。

ありがとうございました。
投稿日時 - 2004-08-24 01:13:58
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数によるOK-チップ配布スタート!

ピックアップ

ページ先頭へ