深くネストしたif文の削減術

プログラミング

はじめに

「if文のネストが深すぎて何のコードかわからない・・・」

「深くネストされたif文の解消方法を知りたい」

こんなお悩みを解決するための記事になります。

以下のようにネストしたif文は読みづらく、バグの温床になりやすいです。

if (...) {
	...
	if (...) {
		...
		if (...) {
			...
			if (...) {
				...
			}
		}
	}
}

こうした、深くネストしたif文の有力な解消法として、「早期リターン」をご紹介します。

今回は、PHPの言語を例に説明していきます。

筆者の経験
✔️ プログラミング歴3年の現役Webエンジニア
✔️ 複数の新規プロダクト立ち上げを経験

早期リターン

深くネストしたif文を解消するのに最も強力なのが、「早期リターン」です。

早期リターンというのは、最初に一行ずつのif文で条件に一致しなかったらその時点でreturnしてしまうことで、ネストを回避する手法です。

こちらは言葉で説明するよりも、実際にサンプルコードを見ていただいた方が早いでしょう。

例えば、以下のようなネストしたif分があったとしましょう。

if ($order->number) {
	$quantity = $order->quautity;
	if ($quantity > 0) {
		$order_stock = $order->order_stock;
		$order_stock->stocks = $quantity;
		return $order_stock;
	} else {
		return false;
	}
} else {
	return false;
}

この場合は、以下のように解消できます。

if (!$order->number) return false;
if ($order->quautity == 0) return false;

$order_stock = $order->order_stock;
$order_stock->stocks = $order->quantity;
return $order_stock;

非常に読みやすくなっているはずです。

これが早期リターンの威力です。

別の例も見てみましょう。

次の例ではfor文による繰り返し処理でネストが発生しています。

foreach ($orders as $order) {
	if ($order->quantity) {
		$order_reserve = $order->order_reserve;
		$quantity = $order->quntity - $order_reserve->reserve_num;
		if ($quntity === 0) {
			continue;
		}
		$order_stock->stocks = $quantity;
	} else {
		continue;
	}
}

繰り返し処理の場合は、returnの代わりにcontinueが使えます。

foreach ($orders as $order) {
	$order_reserve = $order->order_reserve;
	$quantity = $order->quntity - $order_reserve->reserve_num;
	if (!$order->quantity) continue;
	if ($quantity === 0) continue;

	$order_stock->stocks = $quantity;
}

非常にシンプルですっきりとしましたね✨

このように、早期リターンを活用することでコードがシンプルになり、可読性が格段に増すことがあります。

使える場面では積極的に使うようにしていきましょう!

それでは、今日はここまでにします。

ご清聴ありがとうございました!

コメント

タイトルとURLをコピーしました