プログラミング言語では条件分岐を行うための構文がいくつか用意されています。
その中でも大体のプログラミング言語に用意されているif文があります。
条件分岐を行う際に最もよく使うのがif文ではないでしょうか?
そんなif文を多用するあまりif文のネスト(入れ子)を深くしすぎるとコードの可読性が下がり、どういった処理をしているのか理解が難しく読みづらくなってしまいます。
この記事ではif文のネストを回避する方法をいくつか紹介したいと思います。
アーリーリターン
まずはアーリーリターンによるif文の回避方法を紹介します。
アーリーリターンとはその言葉の通りで「戻り値を早い段階で返してあげる」といった意味になります。
戻り値を早い段階で返すことでif文のネストを避けることができます。
まずはif文のネストした状態を見てみましょう。
function method(int | null $a): ?int
{
if ($a !== null) {
if ($a === 1) {
return $a;
}
}
}
変数$aがnullじゃない場合に中の処理を実行し、中の処理にもif文を使っている状態ですね。
アーリーリターンを使ってみましょう。
function method(int | null $a): ?int
{
if ($a === null) {
return;
}
if ($a === 1) {
return $a;
}
}
変数$aがnullの時に、アーリーリターンを使って以降の処理を実行しないようにしています。
こうすることでif文のネストが回避されてコードの可読性が上がることはもちろん、場合によっては以降の処理を読む必要がなくなるので効率よく開発することができるようになります。
論理演算子&&を使う
論理演算子を活用することでもif文のネストを回避できます。
function method(int $a, int $b): int
{
if ($a > 10) {
if ($b > 10) {
return $a * $b;
}
}
}
変数$aが10より大きい数値の時には、変数$bが10より大きい数値かを判定し、大きい場合には処理を実行するといった形になります。
文章にしてもややこしいですね。
これを「変数$aが10より大きい数値」かつ「変数$bが10より大きい数値」の場合に処理を実行するといった形にしてあげましょう。
function method(int $a, int $b): int
{
if ($a > 10 && $b > 10) {
return $a * $b;
}
}
論理演算子&&を使うことでネストを回避し、1行ですっきりとしたコードになりましたね。
コードの可読性が上がったことは間違い無いでしょう。
戻り値にbooleanの値をそのまま使う
こちらは実例を見た方がわかりやすいでしょう。
function method(int $a, int $b): bool
{
if ($a > 10) {
if ($b > 10) {
return true;
}
}
return false;
}
戻り値にbooleanの値をそのまま使う場面としては、戻り値がbooleanである時です。
どうするかというと、
function method(int $a, int $b): bool
{
return $a > 10 && $b > 10;
}
論理演算の結果をそのまま戻り値として返してあげることで、可読性が上がり1行ですっきりとしたコードになりましたね。
まとめ
今回はif文のネストを回避する方法を紹介していきました。
いかがだったでしょうか?どれも簡単にできる取り入れることができる方法だったのではないでしょうか。
今回の例では比較的簡単なコードで紹介したので、「if文をネストしても、そんなに読みづらくないのでは?」と思った方もいるかも知れませんが普段から気をつけないとあっという間にif文のネストが深くなり、途端に可読性の低い読みづらいコードになってしまいます。
キレイなコードを書くための第一歩だと思って、普段のプログラミングの中でぜひ取り入れてみてくださいね。