見出し画像

【開発哲学3_15】〜『CODE COMPLETE第2版 第15章(上巻)』の感想〜条件文の使用

感想

elseとdefaultの扱いは、すごく大事✨

バリデーションって言葉を使いたがる人で、

elseとdefaultに異常処理を書かずに、メインの処理を書いてしまう人が結構多かった。

バリデーション=妥当性確認

なのに、様々な場合分けを考慮できていないから、
思いついた場合だけをelseとdefault以外で場合分けして、
正常処理を書いて、
elseとdefaultでも正常処理を実行させたら、
期待しない結果になるしかないに決まっているのに、、、。

言われれば当たり前なんだけど、

条件文 = 特定の場合以外は実行を制御する文

だから、正常以外の場合に同じ正常処理をさせたら、

何も制御できていないのと変わらない。

と何年経っても、結構、ミスる人多いだよねえ。
頭だけでコードを書いて、肌感覚で身につけてないから。

そんな人ほど、

バックアップを取っていない本番系とかで、elseとdefaultの考慮をしっかりやっていないから、えらい事になってた。
(例)
条件以外の時に、データを追加して、DBを更新。

バックアップ取っていないから、何回か実行されちゃって、データを元に戻せない。
とかね。

そんなアホな笑

と思うかもしれないけど、誰でも一回は通って、涙目になる途だから、気を付けてね。

詳細

見出しとしては、

  1. if文

  2. case文

  3. まとめ

て感じ。

癖なのか、

if (a = b){
 正常処理
} else {

}

みたいな感じで、何も処理しないのに、空白行でelse文をわざわざ書く人や、
aがbでない時に正常処理をさせる場合に、
読めばわかるで、

if(a = b){
  異常処理
} else {
  正常処理
}

て書く人もいたなあ。

そんな人に限って、

空白行の人だと、
「実は、何かの処理を入れてたのに誰かが間違って消したんじゃないか?」と、
設計図とか過去の履歴を確認したり、
それまでの数日間の改修を全て無駄にしてしまうのに、リポジトリを最初まで戻して確認した結果、最初から何も書いてなかったと判明したり
で調査に余計な時間がかかってた。

異常処理を先に書く人の場合、
別の人が改修作業に入って、「先に来ているから正常処理」と勘違いして、うまく動かないと涙目になってたな。、

読みやすさを普段から意識すると、

if (a = b){
 正常処理
} 

だし、

if(a != b){
  正常処理
} else {
  異常処理
}

て書く。

余談

とある大手ベンダーさんでは、

//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}

と何も処理をしないところも含めて、全てのコードに1行ずつ

//コメント

で、コメントを入れさせてた。

おそらく、
レビューする人が何をしているか一目でわかるように、全てのコードにコメントを入れさせる目的なんだろうけど、思いつくだけでもデメリットが2つ。

デメリット

  1. 見れば何もしていないと一目でわかるコードにまで  //何もしない と書くのは、却って読みにくい。

  2. コードを書いた上に、全てのコード行にコメントを書くのは、(特に日本語の場合はさらに漢字変換などで時間がかかる)単純に考えても、作業時間が倍になる。

上の例では、たった数行だけど、数百行〜数万行のコード全てにコメント行が入っていたら、果たして読みやすいか?って話。

例えば、

さっきのコードを数回繋いだだけだけど、

//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}
//もしaとbが同じであれば
if (a = b){
  //正常処理
 正常処理
} else {
 //何もしない
}

と、不要なコメントと空白行を削った下のコード

if (a = b){
 正常処理
}
if (a = b){
 正常処理
}
if (a = b){
 正常処理
}
if (a = b){
 正常処理
}
if (a = b){
 正常処理
}
if (a = b){
 正常処理
}
if (a = b){
 正常処理
}

と比べたら、前者は、読みにくくて仕方ないんじゃないかな?

まとめ

読みやすさ = 何が読みにくいを知ること💃
正常処理が正しくできているかの検証以上に、
異常処理の条件をきちんと洗い出せているか
の考察も重要🕺

この記事が気に入ったらサポートをしてみませんか?