Dim宣言について


VB初心者  2006-04-05 19:05:03  No: 94922

環境はVisualBasic6.0です。

自分はプロシージャ内の先頭に [Dim strData As String] などのように宣言します。
しかし、ヘルプのサンプルコードなどでみると途中でDimを宣言してたりします。

Dimの宣言はプロシージャの先頭のほうに書くべきなのか、または途中で宣言したほうがいいのでしょうか?どちらでもいいような気はするのですがわかりません。
どなたか御存知の方教えてください。よろしくお願いします。


K.J.K.  2006-04-05 20:37:31  No: 94923

どこに書いても、コンパイラが処理してくれます。
# 宣言されていない暗黙の変数も宣言してくれますし。

まぁ、結局は、可読性を考えて決めるべきでしょう。
どちらかが絶対、ということはないと思います。
# 私自身は先頭にまとめていますが、文中で宣言することを
# 否定する気もありません。


VB初心者  2006-04-07 23:15:53  No: 94924

一般的には上にまとめるのでしょうか?
文中で宣言することでなにかまずいこととかはないのでしょうか?


noname  2006-04-07 23:53:17  No: 94925

>文中で宣言することでなにかまずいこととかはないのでしょうか?
まずいことというか、第三者がコードをみたときにわかりにくい・・・とかですよね。


ひろ  2006-04-08 04:29:29  No: 94926

VB6の変数宣言は
「プロシージャ内で宣言された変数の有効範囲は、プロシージャ内の宣言位置以降の行全て」
という規則になっているので、順次実行ではない部分の中(つまり、If とか For とかの中)
に変数宣言があると実行の流れのブロックと変数の有効範囲が乖離してわかりづらくなってしまいますね。

Private Function Command1_Click()
    Dim a As String
    a = Text1.Text
    'ここに変数 b の宣言があった方がわかりやすい
    If Len(a) > 5 Then
        Dim b As String
        b = Right(a, 5)
    Else
        'VB6にはブロック単位の変数のスコープの概念がないので
        'ここで b を参照しても文法上OKです(Option Explicitでも)。
        b = a
    End If
    Label1.Caption = b 'これもバグではありません

    Dim c As String 'これは変数の有効範囲と処理の流れが一致しているのでまだ許せる
    c = Hex(Asc(b + " "))
    Label2.Caption = c
End Sub

# CとかJavaのようなブロック単位のスコープを持つ変数が宣言が出来る言語なら
# ブロック内でしか使わない変数は迷わずブロック内で宣言しますけど。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加