概要
- early returnとは、関数内のif文の分岐先などにおいて、できるだけ早くreturnすること
- ネストが浅くなるので見た目が美しくなるよ
- 分岐先のロジックを追うとき、return以下は読まなくてよくなるよ
コード例
early returnしない場合
UserForm.cs
class UserForm
{
bool VerifyUser(User user)
{
bool isVerified;
if (user.HasBadStatus)
{
isVerified = false;
}
else
{
// 0以下のIDは存在しない
if (user.ID <= 0)
{
isVerified = false;
}
else
{
isVerified = user.VerificationStatus;
}
}
return isVerified;
}
}
- ネストが比較的深く、可読性が低い。
- 変数isVerifiedがどこで変更されているのかわかりにくい。
early returnした場合
UserForm.cs
class UserForm
{
bool VerifyUser(User user)
{
if (user.HasBadStatus)
{
return false;
}
// 0以下のIDは存在しない
if (user.ID <= 0)
{
return false;
}
return user.VerificationStatus;
}
}
- ネストが比較的浅く、可読性が高い。
- どのケースでfalseが返されるのかが明確である。また、そのようなケースにおいてreturn以下を追わなくてよい。
上記のサンプルコードではあまり恩恵が無いかも知れませんが、関数が長いほど・ロジックが複雑であるほど、early returnによる恩恵は大きいと思います。
(そもそも、そういう場合は関数を分割すべきという話はある)
どんな時に使う?
- if文の分岐が原因でネストが深いとき
- ロジックが複雑すぎて、どのようなケースが存在するのか分かりにくいとき
- 異常系の処理をして関数を終了したいとき
- ただし、early returnすることにより実行されなくなる処理がある場合は注意
- 意図しない状態に陥る可能性あり
- early return時の状態に気を配ろう
記事について
本記事は新卒1年目の新米エンジニアが、良いコードの書き方について学んだことを記録したものです。
もし内容に不備などがあれば、ご指摘いただけるとありがたいです。