ネタ元 → はじめてのC。。。ちょいエロ?
「&&は嘘つきが先、||は正直者が先」
ゆーのもありますな。
if ( a && b ) なんてとき、aが偽ならbがどっちだろが
a && b は偽なのでbの評価が端折られます。
同様に
if ( a || b ) なんてとき、aが真ならbがどっちだろが
a || b は真なのでbの評価が端折られます。
なので && の左には偽になりそーな式、
|| の左には真になりそーな式を置くと後に続く評価式が
端折られてちょびっと速くなる確率が上がるべなーってなワケで。
C++では演算子 &&, || をオーバロードできるんですが、
お行儀として"やってはいけない"とされています。
これらをオーバロードすると評価の端折りができんく
なるので見た目と振舞とが一致しなくなるですから。
# VBのAnd, Orだと律儀に両方評価すんのよね。
# 端折ってほしけりゃ AndAlso, OrElse だっけ。
[追記] # だってとりこびとが"ネタに汁っ"ってゆったんだもん
VBにはIIfって関数(?)があるそうで、IIf(式, ホント, ウソ) って書くと
式がTrueならホント/Falseならウソが返ってくんだと。
三項演算子 式 ? ホント : ウソ とコンパチかっつーとさにあらず、
IIfは式がTrueだろがFalseだろが、ホント/ウソの両方を評価するんだと。
やってみよー。 # あのさー、僕VB苦手なんだってば orz
Module Module1
Function hoge() As String
Console.Write("どっかーん ")
Return "ほげ"
End Function
Function payo() As String
Console.Write("ばっきゅーん ")
Return "ぱよ"
End Function
Sub Main()
Console.WriteLine(IIf(True, hoge(), payo()))
Console.WriteLine(IIf(False, hoge(), payo()))
End Sub
End Module
実行結果:
どっかーん ばっきゅーん ほげ
どっかーん ばっきゅーん ぱよ
・・・えー!? 使いみちあんの?
つか生真面目すぎますよ、サボんなさいよ。
If Then Else EndIf の方がまだマシちゃうの?