プログラム初心者脱却?ガード節って何?
こんにちは、ダルオです。
初めてプログラマっぽい話をします。
立場上コードレビューすることが多いのですが、保守やってると糞みたいなコードが出てきて、げんなりすることが多いです。(自分自身はおいときます(笑))
今回はガード節についてお話しします。
多分どんな言語でも使えます。
例は最近枯れた言語であるjavaを例にしてみます。
まずガード節の読み方なんですが、「がーどせつ」と読むみたいです。
意味としては、不要な処理は予め判定し、後続に進ませない(ガードする)というようなコードの書き方となります。
Guardとも言います。
こっちの方がかっこいいですね。
まぁ言ってもよく分からないと思うので、コードで書いてみます。
例えば、保守案件(予め作られたシステムを保守する案件のこと)で以下のようなコードがあるとします。
for (int i = 0; i < 10; i++) {
if (3 < i && i < 10) {
if (i % 2 == 0) {
System.out.println("やったぜ");
}
}
}
※関係ないけど、noteのコードブロックのインデントってもう少し書きやすくならないのかな・・(汗
これはものすごく見辛いコードですが以下のような処理となってます。
・iが4以上 かつ iが9以下 かつ iが2で割り切れる場合、「やったぜ」を出力します。
・・・forの中にif文が2つネストで入ってるという・・
このようなコードがあった場合、レビュー者としては見るだけで疲れます・・
こういうコードを見やすく書くのがガード節です。
こんな感じ
for (int i = 0; i < 10; i++) {
if (i <= 3) continue;
if (10 <= i) continue;
if (i % 2 != 0) continue;
System.out.println("やったぜ");
}
※ifはブロックで囲めとかのコーディングルールは無視してます(笑)
※小なり「<=」で一応向きを合わせてます。「>」も書くことできるけどごちゃごちゃになるので・・
iが3以下の場合は出力する必要がないので次のループに回します。
iが10以上の場合は出力する必要がないので次のループに回します。
iが2で割り切れない場合は出力する必要がないので次のループを回します。
上記3ついずれも該当しなければ「やったぜ」を出力します。
これってつまり
・iが4以上 かつ iが9以下 かつ iが2で割り切れる場合、「やったぜ」を出力します。
と変わらない動きですよね?
でもif文のネストが無くなった分、読みやすくなりました。
こんな感じに直感的に読みやすくコードを書く方法をガード節と言います。
もしかしたらレビュー者に褒められるかもしれないので
こういう書き方をして自分が作ってた時はガード節に変えてみましょう。
※ちなみに既存のコードを直すのはリファクタリングって言うのですが、勝手に直すと怒られる現場もあります。 その場合はちゃんと許可を取ってから直しましょう。本番でバグってあなたのせいにされちゃいますよ(笑)
おしまい
こんな記事も人気です。
この記事が気に入ったらサポートをしてみませんか?