見出し画像

プログラム初心者脱却?ガード節って何?

こんにちは、ダルオです。

初めてプログラマっぽい話をします。


立場上コードレビューすることが多いのですが、保守やってると糞みたいなコードが出てきて、げんなりすることが多いです。(自分自身はおいときます(笑))


今回はガード節についてお話しします。

多分どんな言語でも使えます。

例は最近枯れた言語である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文のネストが無くなった分、読みやすくなりました。

こんな感じに直感的に読みやすくコードを書く方法をガード節と言います。


もしかしたらレビュー者に褒められるかもしれないので

こういう書き方をして自分が作ってた時はガード節に変えてみましょう。

※ちなみに既存のコードを直すのはリファクタリングって言うのですが、勝手に直すと怒られる現場もあります。 その場合はちゃんと許可を取ってから直しましょう。本番でバグってあなたのせいにされちゃいますよ(笑)


おしまい


こんな記事も人気です。



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