🛡

3分で完全理解する「ガード節」

2024/08/26に公開

はじめに

「ガード節」というプログラミングのテクニックをご存知でしょうか?
今回は、駆け出しエンジニアなら知っておきたい「ガード節」について解説します!

ガード節とはどんなものか、3行に要約してみました。

  • ガード節とは、条件分岐(IF文)が理解しやすくなるテクニック
  • 処理の対象外になる条件を、関数の先頭部分に集約してreturnさせる
  • コードのネストが浅くなり、理解しやすくなる・読みやすくなる効果がある

サクッと解説していくので、3分で"完全に理解"しちゃいましょう🔥

ソースコードで分かる「ガード節」

商品の割引価格を計算するサンプルコードを書いてみました。

プログラムの仕様は下記のとおりです。

  • 商品の価格・割引率・税率を引数に渡すと、割引後の価格を返す関数
  • 商品の価格は、正の数かどうか確認する
  • 割引率・税率は、0から1の範囲内か確認する
  • 入力値に問題がある場合、注意メッセージを返す

⭕ガード節を使ったコード

def calculate_discounted_price(price, discount_rate, tax_rate):
    if price <= 0:
        return "価格は正の数でなければなりません"
    if not (0 <= discount_rate <= 1):
        return "割引率は0から1の範囲でなければなりません"
    if not (0 <= tax_rate <= 1):
        return "税率は0から1の範囲でなければなりません"

    #入力値に問題がなければ計算する
    discounted_price = price * (1 - discount_rate)
    final_price = discounted_price * (1 + tax_rate)
    return f"割引後の価格は{final_price}円です"

❌ガード節を使っていないコード

def calculate_discounted_price(price, discount_rate, tax_rate):
    if price >= 0:
        if 0 <= discount_rate <= 1:
            if 0 <= tax_rate <= 1:
                #入力値に問題がなければ計算する
                discounted_price = price * (1 - discount_rate)
                final_price = discounted_price * (1 + tax_rate)
                return f"割引後の価格は{final_price}円です"
            else:
                return "税率は0から1の範囲でなければなりません"
        else:
            return "割引率は0から1の範囲でなければなりません"
    else:
        return "価格は正の数でなければなりません"

どちらが読みやすい・理解しやすいソースコードか体験できたでしょうか?

ガード節のメリット

ガード節の大きなメリットは下記の2つです。

  1. コードの可読性向上
    条件が満たされない場合の処理を最初に明示することで、メインのロジックがシンプルで読みやすくなります。
    条件分岐によるネストが深くなると、頭の中で「今どんな条件だっけ」と考えることが増えるので、その負担も無くなります。
  2. パフォーマンス向上
    条件分岐や処理が多い場合、パフォーマンスが向上することがあります。
    条件が満たされない場合を先にチェックすることで、無駄な計算や処理を省くことができます。

どうやって書けばいいの?

今回の例では、価格が正の数かつ、割引率・税率は、0から1の範囲内の時に計算処理を行います。
この「条件を満たす場合」をそのままプログラムにすると、ダメな例のようになってしまいます。

if price >= 0:
    if 0 <= discount_rate <= 1:
        if 0 <= tax_rate <= 1:
            # 計算処理

そこで「条件が満たされない場合」に関数から抜けるように書き換えます。
IF文の条件が、ダメな例と逆になっている所に注目してください。

if price <= 0:
    return "価格は正の数でなければなりません"
if not (0 <= discount_rate <= 1):
    return "割引率は0から1の範囲でなければなりません"
if not (0 <= tax_rate <= 1):
    return "税率は0から1の範囲でなければなりません"

# 計算処理

まとめ

最後まで読んでいただき、ありがとうございました。
もう一度、ガード節をおさらいします!

  • ガード節とは、条件分岐(IF文)が理解しやすくなるテクニック
  • 処理の対象外になる条件を、関数の先頭部分に集約してreturnさせる
  • コードのネストが浅くなり、理解しやすくなる・読みやすくなる効果がある

普段のコーディングで意識できると、エンジニアレベルがチョットUPします✨
この記事が誰かのためになれば幸いです🙌

GitHubで編集を提案

Discussion