【Java入門】ガード節とアーリーリターンでネストを浅くする

Java
  • ガード節?アーリーリターン?って人
  • ついついネストが深くなってしまう人
  • シンプルなソースを書きたい人

こんな人に役立つテクニックがガード節とアーリーリターンです。私はガード節とアーリーリターンという書き方を覚えてから、よりシンプルなカッコ良いコードを書けるようになりました。

IT業界歴10年以上、現在、フリーエンジニアとして活躍しておりますが、間違いなく覚えておいて損はないです。

では早速、ガード節とアーリーリターンについてみていきましょう。

その他のコードを美しくするためのテクニックや考え方などは下記の記事を参考にしてください。

【初心者向け】スパゲッティコードから脱出する方法3選+α
基本的な文法を理解してある程度プログラムを書けるようになってくると、本人しか理解できないようなコード(※以降、スパゲッティコード)を量産する危険性が増してきます。スパゲッティコードは自分だけでなく、他のメンバーを困らせる原因にもなるので、早い段階でスパゲッティコードから脱出する必要があります。本記事では、スパゲッティコードを脱出し、華麗なコード(※以降、カレーコード)を書くための「知識・技・考え方」について解説していきます。

アーリーリターンを利用して無駄な処理を解消する

すでに返却値が確定しているのであれば、即座に結果をリターンして処理を終了させましょう。この「即座に結果をリターンして処理を終了させる」ことをアーリーリターンと呼んでいます。

アーリーリターンを利用することで無駄な処理をする必要がなくなります。無駄な処理をする必要がなくなるので性能面の向上、可読性の向上が期待できます。

文章だと分かりずらいので、具体的なコードをみてみましょう。

具体的にアーリーリターンありなしをコード比較|しれっとガード節も

アーリーリターンを利用しないパターン

下記のコードはメソッドの冒頭で返却用フラグを宣言して、処理途中のチェック処理で条件に引っかかった場合に、そのフラグにTRUEを代入するといったものです。すべてのチェック処理を実施したうえで結果を返却しています。

public boolean test(int i) {

	boolean ret = false;

	if(i == 1) {
 // もしこのIF文の条件に一致していた場合は後続処理を続ける意味はない
		ret = true;
	}
	if(i == 2) {
		ret = true;
	}
	if(i == 3) {
		ret = true;
	}

	return ret;
}

割と目にするコードですが、途中のチェック処理で条件に引っかかったときに、そのメソッドの結果は確定しているので、残りの処理は実施不要です。

アーリーリターンを利用するパターン

では、アーリーリターンを使用して残念なコードをリファクタリングしてみましょう。

public boolean test(int i) {

	if(i == 1) return true;
	if(i == 2) return true;
	if(i == 3) return true;

	return false;
}

随分スッキリしました。返却値用のフラグ変数を削除して、IF文のチェックに引っかかった場合は即座にリターンするようにしています。これがアーリーリターンというものです。

ちなみに、シレーっと「if(i == 1) return true;」というようなコードの書き方をしましたが、このようなコードの書き方のことをガード節と呼びます。

このガード節もまたコードを簡潔に書くためのテクニックとして有名です。

ガード節の濫用にはご注意を

ガード節はコードを簡潔に書くためのテクニックですが、調子に乗って濫用すると逆に可読性を落とすことに繋がります。ケースバイケースで使用していただければと思います。

オススメは一か所でまとまりを持たせてのガード節利用はアリです。逆に、コードの所々に散りばめられる形でのガード節利用はナシです。

さいごにまとめ

  • 返却値が確定しているのであれば、即座に結果をリターンして処理を終了させる。
  • まとまりのあるガード節はアリ。散らばっているガード節はナシ。

初心者の方でも直ぐ実践で使えるものです。どんどんアウトプットしていってください。

それでは、最後まで読んでいただきありがとうございました!

より詳細な情報を知りたい方はリーダブルコードという本がオススメです!ソースコードは一度書いて終わりではありません。どうしたら読みやすく保守しやすいコードを書けるのかについて知ることが出来る一冊です!

コメント

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