うーん、これも道理といば道理。さらに言えばC#を書きはじめるまで、ファンクションの返り値にこういう条件式をつっこむ、という書き方はしなかったんですけれど(なぜならVBで書くと、なんでも「=」で不気味だから)。
わざわざif文で評価してから返すよりも、ダイレクトに評価してしまった方が、当然処理は速いですものネ。…ま、Functionの中身はかなり短いロジックにならざるをえませんので需要があるかどうかはビミョーですが。とりあえず、速度対決。
(1)
Private Function IsTestTrue01(ByVal a As Long) As Boolean If (a Mod 2 = 0) Then IsTestTrue01 = True Else IsTestTrue01 = False End If End Function
(2)
Private Function IsTestTrue02(ByVal a As Long) As Boolean IsTestTrue02 = (a Mod 2 = 0) End Function
結果
(1):1756 ミリ秒
(2):1588 ミリ秒
※Access2003で実験
サンプルソース
フォームにtxtDATAという名前のテキストボックスを作って、そこにタイムを表示する。clsTimerMMクラスは「時間経過計測クラス‐VBA編」参照。
Dim clsTimerMM As clsTimerMM Dim i As Long Dim lngMax As Long Dim strMsg As String Set clsTimerMM = New clsTimerMM lngMax = 10000000 '************************ clsTimerMM.SetStartDate For i = 0 To lngMax Call IsTestTrue01(i) Next strMsg = "(1):" & clsTimerMM.ElapsedTime & vbCrLf '************************ clsTimerMM.SetStartDate For i = 0 To lngMax Call IsTestTrue02(i) Next strMsg = strMsg & "(2):" & clsTimerMM.ElapsedTime & vbCrLf '************************ Me.txtDATA.Value = strMsg Set clsTimerMM = Nothing
2 件のコメント:
不気味って表現に笑っちゃいました。代入と比較が同じ「=」なんて
おかしいですよね。だからってPHPみたいに代入と比較があわせて
「=」、「==」、「===」の3つあるってのも不気味ですよね。
むーー!!(・ε・ )
い、け、ず!!
「不気味」は「ファンクションの返り値にこういう条件式をつっこむ」って
トコにかかっているんですヨ!(たぶんね・笑)
VB一色だったときは等値と代入共に「=」だったので、
自然と「IsTestTrue02 = (a Mod 2 = 0)」なんて書き方は、
避けていたねぇ。
それが「return (a Mod 2 == 0);」だと、
胸にストンと落ちちゃうんだから、面白いよね。
現在C#を勉強中だけど、
言語の仕様に思考もひっぱられて、
.NETを改めて別の視点で捉えなおしているような感じで、
かなり毎日、楽しいです。
PHPの話は懐かしいね!!!
「===」とかは、
「それ、なんのネタ?」って思ったものだよ。(^^;
コメントを投稿