プログラムが複雑になってくると、データ数が増え、条件式も複雑なものが多くなってきます。
複雑な条件式は可読性が落ちてしまい、プログラムの理解に時間がかかったり、バグを引き起こす要因にもなる場合もあります。
そこで、わかりやすい条件式の書き方について、いくつかの方法を解説します。
定数との比較
変数と定数を比較する場合は、変数を左辺へ、定数を右辺へ記述すると読みやすくなります。
// 変数が左辺:〇
if(A >= 20)
// 変数が右辺:×
if(20 <= A)
上記の例で、Aさんの年齢を判定していると仮定します。
ぱっと見でどう感じるでしょうか?
変数が左辺の場合、「Aさんの年齢が20歳以上の場合」と読み取れますが、
変数が右辺の場合、「年齢が20歳以上なのがAさんの場合」となり、文章化したときに違和感があり、情報が頭に入りにくくなります。
たったこれだけのことですが、可読性に大きく影響しますので、基本的には変数が左辺にくるように条件式を書きましょう。
チームで開発している場合に、これを守っていないと嫌われるかも。。。💦
ただし、例外もあります。
次に解説する、「変数値の範囲を判定」する場合は、必ずしも変数が左辺に来る方が分かりやすいとは限りません。
変数値の範囲の判定
変数値の範囲の判定は、大体が次の2パターンになります。
下記のように条件式を書くと、変数と定数が図の並びの通りになるので、わかりやすくなります。
if((10 < A) && (A < 20)) // パターンA
if((A < 10) || (20 < A)) // パターンB
複数の論理式の組み合わせ
複雑な論理式の場合、1行で書くと理解が難しくなります。
if((A==0) && ((B<C) || (B<10)) && (C!=D))
このような場合は、ANDまたはORで括って改行すると、わかりやすくなります。
if((A==0) &&
((B<C) || (B<10)) &&
(C!=D))
上記例のようにANDで括って改行すると、1行ずつ条件式を分けて考えられるので、どのような複合条件になっているのかが、理解しやすくなりますね。これは条件式が複雑になるほど効果があります。
条件式の関数化
よく使う条件式だったり、あまりにも複雑な場合は条件式を関数化する手もあります。
if((A==0) && ((B<C) || (B<10)) && (C!=D))
上記の条件式を関数化した例:
_Bool Judge(int A, int B, int C, int D)
{
if((A==0) &&
((B<C) || (B<10)) &&
(C!=D)){
return TRUE;
}
return FALSE;
}
if(Judge(A,B,C,D) == TRUE)
まとめ
条件式を書く時には以下のことに気をつけましょう。
- 変数と定数の比較では、変数を左辺に、定数を右辺に!
- 変数値の範囲の判定では、上記のルールに縛られず、値の小さい順番に!
- 複雑な論理式では、ANDまたはORで括って改行!
- 良く使用する条件式は関数化!
上記を意識するだけで、可読性がグッとUPしますので、実践してみてください。
他にも、可読性をUPさせるためのテクニックは多々あります。
書籍「リーダブルコード」がおススメです。是非読んでみてください。
コメント