if文の括弧は省略できるなら省略するのは是か非か

if文の括弧は省略できるなら省略するのは是か非か

暑いのに洗濯物を干すと雨が降って台無しになることが最近2回あってへこんでいるtanakaです。さて、本日は@ITのソフトウェア開発に関する話題を取り上げ、その是非について考えます。

if文の括弧は省略できるなら省略するのは是か非か

半月前に@ITにプログラマで、生きている: カッコをつけたコードはカッコわるいのか論争というコラムが投稿されました。内容は、if文の括弧省略の是非について筆者たちが議論するものです。コメント欄ではコーディング規約の話で盛り上がっているようです。

ちなみに私は常に括弧を付ける派です。なぜ括弧を付けるかというと、後でコードを変更するときに2文に増えても、新たに括弧を付け足す必要が無いからです。どういうことでしょうか?コードを変更する必要にせまられたときのことを考えてみましょう。

if ($hoge === 1)
    doSomeThings();

if文では評価式の結果がtrueのとき実行する命令が1文なら括弧を省略できます。ここでコードを変更しなくてはいけなくなりました。しなければいけないことは、$hoge === 1のときに、doSomeThings2()も実行させることです。次のように修正します。

if ($hoge === 1)
    doSomeThings();
    doSomeThings2();

この変更では、$hoge === 1のときだけ doSomeThings2();を実行させたくてコードを追加しましたが、この場合、常に doSomeThings2()は実行されてしまいます。上記のコードは次のコードと同じ意味を持っているからです。

if ($hoge === 1) {
    doSomeThings();
}
doSomeThings2();

もとから括弧がついていれば、こういった変更ミスは減らせそうです。最初から括弧がついている方がバグが減らせる、ということを根拠付きで主張するには至らないのですが、括弧のないif文を見ると、なにかイヤな気分になります。

シーブレインのプログラマーが書いたコードを見ても括弧が省略されたコードを見た記憶がないのでみんな付ける派なのかもしれません。ちなみに、Zend Frameworkのコーディング規約では括弧の省略は禁止されているようです。(このエントリーを書いたときリダイレクトループが発生し、参照不可ですが、確かそうだったと思います。)

参考文献

Joel Spolskyのエッセイ「間違ったコードは間違って見えるようにする」ではこのようなコードに不安を覚える段階があることを取り上げています。書籍「More Joel on Software」(原著:More Joel on Software)でも同じエッセイを読むことができます。(p.182~p.183)

More Joel on SoftwareMore Joel on Software
青木 靖

翔泳社 2009-04-09
売り上げランキング : 58608
おすすめ平均

Amazonで詳しく見る
by G-Tools
  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ