コーディング規約の憂鬱(1)
現在従事しておりますプロジェクト、それなりのコーディング規約がありまして、その中にこんなものがあります。
- 条件の比較式では定数を左辺に書く。
- 条件の比較式では単項演算子のみはダメ。
前者は(個人的には嫌いですが*1)ありがちな規約ですが、後者の方はあまり見かけたことがない気がします。
で、この規約の何が気に入らないかというと、
int c; // 数字以外のときに何かの処理をしたい if( !isdigit( c ) ) { // 何かの処理... }
などと書きたい場合に
if( 0 == isdigit( c ) )
という風な条件式を書かないといけないところです。この場合、isdigitが偽の際に0を返すという仕様を知っている必要がありまして、
if( false == isdigit( c ) )
などとはできないわけですよ。0と比較するのって何だか直感的でないなぁ、と思ったりするわけで。
あと、「条件式で定数が前」というルールに従うと、大小比較のときにわかり難くなってしまいます。
if( ( 0 < value ) && ( 10 > value ) )
とするよりは
if( ( 0 < value ) && ( value < 10 ) )
という風に、「左が小さく、右が大きく」とした方が直感的だと思います。この点についてはプロジェクトのコーディング規約を完全に無視していますけれども。
*1:"=="を間違えて"="と書かないためのガードだという意見もありますが、文脈から考えると定数は右辺だと思うのですよ。