ネストを浅くしよう!早期にreturnしよう!

問題

こんなソースコードを見たことありませんか?

そして、これを少しでも読みやすくしてみましょう!

function checkData($data) {
    if ($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                if ($key == '特定のキー') {
                    if (is_numeric($value)) {
                        // 処理A
                    } else {
                        // エラー処理
                    }
                } else {
                    // 別の処理
                }
            }
        } else {
            // データが配列でない場合の処理
        }
    } else {
        // データがない場合の処理
    }
}

これは読む気が失せます。そして間違いも起こりやすいです。この可読性の悪いソースコードを読みやすくしましょう。

答え

function checkData($data) {
	if (empty($data)) {
        // データがない場合の処理
        return;
    }

    if (! is_array($data)) {
        // データが配列でない場合の処理
        return;
    }

    foreach ($data as $key => $value) {
        if ($key != '特定のキー') {
            // 別の処理
            continue;
        }

        if (! is_numeric($value)) {
            // エラー処理
            continue;
        }

        // 処理A
    }
}

処理が出来ない値を渡された場合、早期に return することでネストを浅くできます。

エラー処理を先行し、「処理A」を一番最後にもってくることで、正常系の処理を集中して書くことが出来ます。

ぜひ普段の実装に取り入れてみましょう!