こんにちは!限界ド文系大学生、堕罪オサムです。
大学では国語学・日本語学を主に学んでいます。
条件が複数あるif文を書いてメンターに見せたときのこと
突然ですが、JavaScript初学者の皆様。
1. 条件Aが成り立つときはYESを出したい
2. 条件Bが成り立つときもYESを出したい
3. 条件Cが成り立つときはNOを出したい
4. 条件Dが成り立つときもNOを出したい
こんな感じで、条件が複数あるif文を書きたいとき、ありませんか?
私自身、勉強を進めていく過程でこんな感じのコードを書く時がありましたので実際に書いてみました。
~n時間後~
ワイ「よっしゃ!書けたぞ~。早速メンターに見てもらおう!」
メンター「DRY原則に反してる書き方だからやめたほうがいいよ~」
私が実装したアンチパターン
このときの私はこういったコードを書きました。(code.1)
//YESになるものをまとめたif文
if(条件A){
console.log("YES")
}else if(条件B){
console.log("YES")
}
//NOになるものをまとめたif文
if(条件C){
console.log("NO")
}else if(条件D){
console.log("NO")
}
そもそもDRY原則とは?
簡単に言うと
同じような処理を複数の場所に書かないほうがいいよ!
ということです。
ふむふむ、知らなかった~。
もう少し細かく言うならば、DRY原則はシステム全体で重複するのはよくないということらしいです。
またOAOO原則というものもありました。そちらのほうはソースコードに書く処理を重複するのはよくないという感じみたいです。
インフォメーション
初学者による初学者に向けての記事なのでここではDRY原則とOAOO原則を厳密に分けない(分けられるほどの知識がない)ことを承知の上、読み進めていただけると幸いです。
DRY原則を意識することのメリットとして
・コードそのものが読みやすくなる
=>結果、メンテナンス性が高くなる
・重複したコードが減ることで、書き直すコードの数が減る
があります。
修正後のコード
よって、先ほどのコードをDRY原則に外れないように書き直すと_(code.2)_
// YESになるものをまとめたif文
if (条件A || 条件B) {
console.log("YES");
}
// NOになるものをまとめたif文
if (条件C || 条件D) {
console.log("NO");
}
YESとNOを2回づつ出さないことで、かなりすっきりしました!
ちなみに||
は論理演算子のOR条件ともいうらしいです。ほえ~。
条件の中に&&
も入れられるのでかなり便利、その上コードが読みやすくなる。すごすぎる。
ほかの書き方もできました
また、コードを綺麗に書くという点で、条件式の結果を変数にまとめるというやり方もあります。(code.3)
// YESになる条件をまとめた関数
const isYes = 条件A ||条件B;
// NOになる条件をまとめた関数
const isNo = 条件C || 条件D;
if (isYes) {
console.log("YES");
} else if (isNo) {
console.log("NO");
}
こちらもアンチパターンとは違い、すっきりして分かりやすく書くことができました。
まとめ
うん!やっぱり難しい!!
率直な感想はこれに尽きます……。
初学者だからとりあえず動けばいいや!なんてことはなく、きれいなコードを書く練習だと思って今後も精進していきます。
ここまで読んでくださりありがとうございました!