http://blogs.wankuma.com/shuujin/archive/2008/01/17/117872.aspx
(囚人のジレンマな日々)
を読んでいて、ふと思ったことがあったので、テーマを少し変えると共に、更に単純にしてみます。
10~20 であるかどうかを判断させる場合の比較演算式の書き方として、どのように書くことが「良いこと」なのか?
ちなみに、if のような条件式だとロジックによって答えが変わって来る場合もあると思うので、あくまでも真偽を得るための比較演算式として考えてみることにします。
今までに僕が、教わった方法は、以下の 2 通りの方法です。
10 <= x && x <= 20
x >= 10 && x <= 20
どちらも正しい
と教わりました。
前者が正しい理由は、10~20 という考え方に対して、最も直感的であるからだそうです。
数学的にも、 10 <= x <= 20 のように表現しますからね。
一方後者が正しい理由は、x が主であり、その主となるものの値が、どのような状態になっているのかを表すからだそうです。
「x は 10 以上である」「x は 20 以下である」の二つを、単純に条件式にすると自然と以下の表現になります。
x >= 10 && x <= 20
どちらも一理あるように思うのですが、僕は常に後者の書き方で統一しています。
と言うことで、後者派の立場になって、後者であるべき主張をしてみるテスト。
後者の書き方は、後からの変更において、例えば「但し、18 は対象外にする」という条件が加わった場合などの拡張性に優れています。
x >= 10 && x <= 20 && x != 18
また、x が常に左辺にある場合、次のように比較演算子と右辺の値だけを読めば良いのです。
>= 10 && <= 20 && != 18
なので、いつも以下のような記法が欲しいと思っています。
x : >= 10 && <= 20 && != 18
この場合、マジックナンバーを単純な変数に変えた場合でも、左辺を読む必要がないので可読性が高くなります。
x >= a && x <= b && x != c
ちなみに、常に「 >」 あるいは「 < 」 を使わない!、という人もいました。
例えば > しか使わないことにしている人は、以下のように書くのが回答になる訳です。
10 >= x && 20 >= x
これによって、比較演算子の < と > が混在することの混乱を無くせるのだそうです。
いろいろな人がいますが、恐らく、自分が常に使っているパターン以外で記述されているコードは気持ち悪いという点については意見が一致していることでしょう。