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 Software 青木 靖 翔泳社 2009-04-09 売り上げランキング : 58608 おすすめ平均 Amazonで詳しく見る by G-Tools |