|
こんばんは。
>If CheckBox1.Value = True Then
>の記述方法は十分にありだと思います。
私もこの考え方に近い意見です。
もっともBoolean型に限って
If CheckBox1.Value Then
この記述にしようというローカルルールも良しなんですが・・・。
>(仮にこの書き方をしたとして、どの程度実行速度が低下するかも疑問です。)
私の環境で以下のコードで
Option Explicit
Const lp As Long = 1000000
Sub main1()
Dim g0 As Long
For g0 = 1 To 10
test1
test2
Next
End Sub
Sub test1()
Dim tm As Double
Dim a As Boolean
Dim g0 As Long
Dim cnt As Long
cnt = 0
tm = [now()]
For g0 = 1 To lp
a = 1
If a Then
cnt = cnt + 1
Else
cnt = cnt - 1
End If
Next
Debug.Print "test1 " & cnt
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
Sub test2()
Dim tm As Double
Dim a As Boolean
Dim g0 As Long
Dim cnt As Long
cnt = 0
tm = [now()]
For g0 = 1 To lp
a = 1 '(Int(Rnd() * 10000) + 1) Mod 2
If a = True Then
cnt = cnt + 1
Else
cnt = cnt - 1
End If
Next
Debug.Print "test2 " & cnt
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
test1とtest2では、百万回のループで0.02秒〜0.05秒ぐらいtest1の方が
速かったですよ!!
変数aをチェックボックスに置き換えても百万回ループで0.3秒程度の差でした。
インタプリタが
If CheckBox1.Value = True Then
と
If CheckBox1.Value Then
をどのように解釈しているのか(Pコード自体が本当に1手間よけいな処理に落としている)は、分かりませんが、上記のテスト結果からは、若干ですが差が見られます。
が、コードの分かりやすさという観点から
If CheckBox1.Value = True Then
これを否定することも出来ません。
If 条件文 Then に関しては、実際には、真(True)だったらではなく、
Falseでなかったらという処理をしているので、
以下のコードは、1から百万までの間で4で割り切れない数がいくつあるか数えています。
Option Explicit
Const lp As Long = 1000000
Sub main2()
Dim g0 As Long
For g0 = 1 To 10
test1
test2
Next
End Sub
Sub test1()
Dim tm As Double
Dim a As Long
Dim g0 As Long
Dim cnt As Long
a = 4
cnt = 0
tm = [now()]
For g0 = 1 To lp
If (g0 Mod a) <> 0 Then
cnt = cnt + 1
End If
Next
Debug.Print "test1 " & cnt
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
Sub test2()
Dim tm As Double
Dim a As Long
Dim g0 As Long
Dim cnt As Long
a = 4
cnt = 0
tm = [now()]
For g0 = 1 To lp
If g0 Mod a Then
cnt = cnt + 1
End If
Next
Debug.Print "test2 " & cnt
Debug.Print Application.Text([now()] - tm, "hh:mm:ss.00")
End Sub
この結果は、0秒から0.03秒ぐらいtest2の方が速いです。
If (g0 Mod a) <> 0 Then
でも、こっちにするだろうなあ・・・。
|
|