コーディング規約の憂鬱(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:"=="を間違えて"="と書かないためのガードだという意見もありますが、文脈から考えると定数は右辺だと思うのですよ。