このブログについて
最近システム設計に興味を持ち、特にコード設計について学んだことをまとめます。
自分の今後の戒めも込めて。
ネストについて
条件分岐が深くなると、コードを読む人はどの条件が成立したときに処理が行われるのかを頭の中で追わなければなりません。
これは認知負荷が高く、バグを生む温床になります。
深いネストは、一見まじめに書かれているようでも、読むのがつらいコードを生みます。
そのため、条件を早期に切り出して処理を平坦化する「ガード節(早期リターン)」を使うことが推奨されます。
悪いコード例
if (user != null)
{
if (user.IsActive)
{
if (!user.IsLocked)
{
if (user.Role == "Admin")
{
GrantAccess(user);
}
}
}
}
一見まじめに書かれていますが、読む人にとっては地獄です。
条件の入れ子が深くなると、
「何が前提で」「どの分岐が有効なのか」を脳内でシミュレーションする必要があります。
良いコード例
if (user == null) return;
if (!user.IsActive) return;
if (user.IsLocked) return;
if (user.Role != "Admin") return;
GrantAccess(user);
「早期リターン(ガード節)」を使うことで、構造が一気に平坦になりました。
読みやすさは認知負荷の低さです。
深いネストを避けることは、バグを減らすことに直結します。