0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コード設計学習2 ネスト

Posted at

このブログについて

最近システム設計に興味を持ち、特にコード設計について学んだことをまとめます。
自分の今後の戒めも込めて。

ネストについて

条件分岐が深くなると、コードを読む人はどの条件が成立したときに処理が行われるのかを頭の中で追わなければなりません。
これは認知負荷が高く、バグを生む温床になります。

深いネストは、一見まじめに書かれているようでも、読むのがつらいコードを生みます。
そのため、条件を早期に切り出して処理を平坦化する「ガード節(早期リターン)」を使うことが推奨されます。

悪いコード例

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);

「早期リターン(ガード節)」を使うことで、構造が一気に平坦になりました。
読みやすさは認知負荷の低さです。
深いネストを避けることは、バグを減らすことに直結します。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?