はじめに
アーリーリターンはコーディングのテクニックです。
簡単に書き方等をご紹介したいと思います。
書き方
そもそもアーリーリターンって何か、というと「ネストが深くなった条件文を分解する」書き方です。
ネストが深くなると、可読性が低くなりどういう処理を行っているのか分かりにくくなります。
そこで、アーリーリターンという記述方法を用いることで可読性を上げます。
具体的には、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は記述しない方法を考えてみる
おわりに
以上、アーリーリターンについてのまとめでした。
参考になればと思います。
ここまで読んでいただきありがとうございました。