はじめに
「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;
}
非常にシンプルですっきりとしましたね✨
このように、早期リターンを活用することでコードがシンプルになり、可読性が格段に増すことがあります。
使える場面では積極的に使うようにしていきましょう!
それでは、今日はここまでにします。
ご清聴ありがとうございました!
コメント