アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

VB暦1年です。

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

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

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

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

A 回答 (2件)

おっしゃる通り、カンマで区切る場合は、


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型を使うべきではないです。

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

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

以後、気をつけます。

ありがとうございました。

お礼日時:2004/08/24 01:12

#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
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2004/08/24 01:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!