kagamihogeの日記

kagamihogeの日記です。

きになる if 文

下のような if 文はなんとなくきになる。

if (hoge_status == READY_OK) {
// ステータスが OK のときの処理
}

C に限らずこのテのフラグチェックをする if 文はありがちだけど、やっぱり気になる。

if (is_hoge_status_ready(hoge_status)) {
...
}

メソッド名はテキトーだけど、出来ればこんな感じに書きたくなる。

別に変わらないじゃん、って感じだけどコードの意味するところは全然違う。

ここのコードで表現したいコトは、hoge_status が READY_OK とイコールか比較したいんじゃなくて、hoge が起動状態かどうかを問い合わせること。その辺を素直に表現するにはメソッドを一個作って、メソッド名に説明させてやるほうが良いと思う。

まぁデバイスドライバなんかの低レベル層だと回りくどい記述なだけなかもしんないけど。ただ、それでも if の簡素化・可読性の向上を考えることには意味があると思う。

その理由は、昔から言われてるように if はバグの源泉にどうしてもなってしまうから。

デザインパターンはクラスによって if を排除してる側面があるし、羽生章洋さんのワークステートエンジンについて書いてるエントリでも IF文撲滅!を謳ってるし。後者は業務アプリについての議論だけど、根底に流れてる思想は別に業務アプリに限った話ではない・・・と俺は思ってます。

そんなわけで。ソフトウェア工学は if と上手く付き合う方法の発展の歴史という側面があるかもなーと思いました。