1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アーリーリターンについて

Last updated at Posted at 2023-08-27

はじめに

アーリーリターンはコーディングのテクニックです。
簡単に書き方等をご紹介したいと思います。

書き方

そもそもアーリーリターンって何か、というと「ネストが深くなった条件文を分解する」書き方です。
ネストが深くなると、可読性が低くなりどういう処理を行っているのか分かりにくくなります。
そこで、アーリーリターンという記述方法を用いることで可読性を上げます。
具体的には、returnを用いてifなどの条件分岐のネストを減らして記述します。

記述例

適応前

Pythonでのサンプルを記述します。
以下のコードでは、ネストが深く、条件分岐が複雑になり返却値がどの階層なのかぱっと見わかりません。

from datetime import date
import datetime

def isActiveUser(user: dict) -> bool:
    if user != None:
        if user["del"] != True:
            today = date.today()
            if user["start_date"] <= today:
                if user["end_date"] == None or today <= user["end_date"]:
                    return True
                else:
                    return False
            else:            
                return False
        else:
            return False
    else:
        return False
def main():
    deadline_period = datetime.timedelta(days=10)
    user = {
        'id':'id_1001',
        'name':'mike',
        'address':'japan',
        'tel_no':'000-0000-0000',
        'start_date': date.today(),
        'end_date':date.today() + deadline_period,
        'del': False
    }
    result = isActiveUser(user)
    if result == False:
        print("Activeなuserではありません")
    else:
        print("Activeなuserです。")

適応後

上記のサンプルをアーリーリターンで記述します。
アーリーリターン、つまりエラーパターンを早期に返却して、
最後に正常パターンの処理を記述する方法です。
メリットは、

  • ネストを浅くすることができる
  • エラーパターンを最初にチェックを入れているため、可読性が上がる

詳細は以下のサンプルを参照してください。

from datetime import date
import datetime

def isActiveUser(user: dict) -> bool:
    if user == None:
        return False
    if user["del"] == False:
        return False
    today = date.today()
    if user["start_date"] > today:
        return False
    if user["end_date"] != None and user["end_date"] <= today:
        return False
    return True

def main():
    deadline_period = datetime.timedelta(days=10)
    user = {
        'id':'id_1001',
        'name':'mike',
        'address':'japan',
        'tel_no':'000-0000-0000',
        'start_date': date.today(),
        'end_date':date.today() + deadline_period,
        'del': False
    }
    result = isActiveUser(user)
    if result == False:
        print("Activeなuserではありません")
    print("Activeなuserです。")

具体的な書き方のコツ

  • エラーパターンを最初にチェックする
    • 正常パターンで記述している人は、それを反転させる
  • 正常パターンは処理の最後に記述する。
  • if文が多くなっても条件を分けて記述した方が分かりやすい
  • elseは記述しない方法を考えてみる

おわりに

以上、アーリーリターンについてのまとめでした。
参考になればと思います。
ここまで読んでいただきありがとうございました。

参考文献

早期リターンを書こう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?