2009-03-19 11 views
2

関数の先頭に変数を挿入し、使用する直前に変数を宣言すると、パフォーマンス上の利点はありますか?私はMSアクセス2003VBAの変数宣言のパフォーマンス上の利点は?

例でVBAを使用しています

Function f(y As Long) As Long 
     Dim x As Long 
     If y <> 0 Then 
      x = 1000000 
     End If 
End Function 

Function f(y As Long) As Long 
     If y <> 0 Then 
      Dim x As Long 
      x = 1000000 
     End If 
End Function 

答えて

8

VBAのための絶対に違いはありません。変数を宣言すると、デザインタイムのデバッグにのみ影響します(IDEは自動補完(intellisense)が何を表示するかを知っています)。この場合、パフォーマンスにはまったく影響しません。私はVBAマクロもたくさん作っています。それは私が気付いたことの一つです。

デモンストレーションとして、Dimステートメントにブレークポイントを設定しようとすると、許可されないことがわかります。この命令は決して実行されず、ジャストインタイムのデバッグエンジンを導くためにのみ使用されるためです。

はそれが

2

がWadih Mの答えに追加するにはお役に立てば幸い、すべての宣言された変数は関係なく、手順内での位置の、コンパイルされている手順に先立って初期化されます。これをテストする

、(右、あなたが明示的なオプションを使用していますか?)それを宣言せずに変数を使用しよう:

Option Explicit 

Private Sub notDeclared() 
    Dim x As Long 

    Debug.Print x 
    Debug.Print y 
End Sub

これは、ブレークポイントは、プロシージャの宣言された状態で「変数定義されていないエラー」を返します。つまり、コードが実行される前に、宣言されていない変数 yが強調表示されます。

+0

はい、私はOption Explicitを使用します。助けてくれてありがとう。 –

1

Wadihによって回答されたコード自体のパフォーマンスには影響しません。

しかし、コードを維持するパフォーマンスは、確かに。 私はほとんどのプログラマーは、変数が関数の先頭に定義されると考えています。 あなたの提供しているような簡単な例ですが、問題ではありません。しかし、コード内に散在する変数宣言を持つ複雑な関数は、複雑に感じます。したがって、コードを読んでgrokする時間が遅くなります。したがって、維持にかかる時間が増加する。

ループ内に変数を宣言し、意図していない可能性のある問題もあります。したがって、変数は各ループ反復でリセットされます。

コード自体のパフォーマンスは、コードを維持するパフォーマンスほど重要ではないことがよくあります。

+0

"ループ内で変数を宣言し、意図しない変数を宣言すると、変数が各ループ反復でリセットされます。問題はありません。変数は繰り返しごとにリセットされません。 – onedaywhen

+2

"私はほとんどのプログラマーは変数が関数の最上位に定義されることを期待していると思います" - VBAプログラマーかもしれない。ほとんどのC#.NETプログラマーは、変数が最初に使用される/宣言されるときに変数を宣言し、VB.NETコーダーがそれに従っていると思わなければなりません。 – onedaywhen

関連する問題