Boolean型とIfの関係について
前提
If文の条件分岐が「何を判断してるのか?」根本的な意味で理解されていないケースが多いので、もう一度基本に立ち返ってBoolean型とIf文の関係性を考えてみる。
基本
If isTrue Then
isTrue = False
Else
isTrue = True
End If
何の変哲もない、真偽(True,False)が入れ替わる条件式だ。
大半の人は、なんてことのない普通のIf文だが、これとは異なる感覚を持つ人が少なからずいる。
下記がその例だ。
If isTrue = True Then
isTrue = False
Else
isTrue = True
End If
VB以外の言語をやってきた人にとって見るとぎょっとしてしまうようなコードだが、ことVBに限ってはさほど珍しくなかったりする。
If isTrue = False Then
isTrue = True
Else
isTrue = False
End If
上記のようなコードすらまかり通るのがVBだ。
評価のイコールと、代入のイコールが混ざり合うとなおのことわかりづらい。
おそらくだが、If文が真偽判定をしているということの根本的な意味合いを理解していないプログラマーが多いのだろうと思う。
Private Function isEven(a As Integer) As Boolean
Return a Mod 2 = 0
End Function
ちょっと変化球を投げてみる。上記は偶数判定をするコードだが、isTrue=Trueが当たり前のプログラマーはこのReturnの仕方で躓いてしまうだろう。あるいは「よくないコード」という判定を下すかもしれない。
Private Function isEven(a As Integer) As Boolean
If a Mod 2 = 0 Then
Return True
Else
Return False
End If
End Function
修正した結果がこちら。しかし「これが正解だ!」と言われても、正直困ってしまうのだ。
いくら何でも冗長すぎるだろうというのが現場の一般的な感覚だろうだからだ。
「読みやすい。わかりやすい」と主張されることもあるが、おそらく通用するのはごく狭い一部の世界だけなので控えたほうがいい。すくなくとも、自分の評価を上げる結果にはならない。下手をすると「よほど低いアンテナを張っているんだな」と誤解を招くことさえある。特にベテランの域に達している人は注意が必要だ。
まとめ
まずは基本に立ち返って、If文が何をするためのものなのか考える必要がある。
日本語のIf文説明Webコンテンツは必ずといっていいほど下記紹介が行われている。
If (条件式) Then
End If
確かに正しいが、式と言ってしまうと評価式が主体となってしまい、本来は「評価した結果」が必要なのだという根本的なところまで理解しづらい。そもそも、Ifは式など求めていない。
If True Then
End If
だからこそ、上記コードがコンパイルエラーにならない。
昨今、求められているのは簡潔なコード。
冗長なコードは、より多く人にゆだねられているパワーが強く、それだけバグをはらむリスクを抱えている。同じ意味合いで短くかけるのであれば、コンパイラにゆだねてしまえばいいのだ。
※かといってWhitespace(という言語)レベルになると、さすがにどうかと思うが。。
コメントを残す