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(という言語)レベルになると、さすがにどうかと思うが。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です