🛡
3分で完全理解する「ガード節」
はじめに
「ガード節」というプログラミングのテクニックをご存知でしょうか?
今回は、駆け出しエンジニアなら知っておきたい「ガード節」について解説します!
ガード節とはどんなものか、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つです。
- コードの可読性向上
条件が満たされない場合の処理を最初に明示することで、メインのロジックがシンプルで読みやすくなります。
条件分岐によるネストが深くなると、頭の中で「今どんな条件だっけ」と考えることが増えるので、その負担も無くなります。 - パフォーマンス向上
条件分岐や処理が多い場合、パフォーマンスが向上することがあります。
条件が満たされない場合を先にチェックすることで、無駄な計算や処理を省くことができます。
どうやって書けばいいの?
今回の例では、価格が正の数かつ、割引率・税率は、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します✨
この記事が誰かのためになれば幸いです🙌
Discussion