【Java】意外と知らないNullPointerExceptionを出さないテクニック!


NullPoが出るコード

public class PreventFromNullPo {
	public static void main(String[] args) {
		for(int i = 0; i < 5; i++){
			if(getSongname(i).equals("白い恋人達")){
				System.out.println("クリスマスは終わったよ");
			}else{
				System.out.println("テンション打ち上げウィィィィィ");
			}
		}
	}
	
	public static String getSongname(int index){
		switch(index){
		case 0: return "白い恋人達";
		case 1: return "白い恋人達";
		case 2: return null;
		case 3: return "シュラバ★ラ★バンバ";
		default: return null;
		}
	}
}

これはNullPoが出るコードです。
僕も先日こう言う書き方をして怒られて来ました。
この書き方実は童貞臭い書き方なのです。

百戦錬磨のプロはひと味違いました。
けどその前に悪い例をもう1つ。

public class PreventFromNullPo {
	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			if (getSongname(i) != null) {
				if (getSongname(i).equals("白い恋人達")) {
					System.out.println("クリスマスは終わったよ");
				} else {
					System.out.println("テンション打ち上げウィィィィィ");
				}
			}
		}
	}

	public static String getSongname(int index) {
		switch (index) {
		case 0:
			return "白い恋人達";
		case 1:
			return "白い恋人達";
		case 2:
			return null;
		case 3:
			return "シュラバ★ラ★バンバ";
		default:
			return null;
		}
	}
}

もっと童貞くさくなりました!笑
if(hogehoge.mogamoga() != null)です!
これは非常にダサい!

っていうか君は毎回これをやるのか?!
NullPoのリスクがある箇所で毎回こんなバリデーションをするのか?
これは非常にスマートではありません。

ホンモノの漢はこう書くそうです。



漢のコード

public class PreventFromNullPo {
	public static void main(String[] args) {
		for(int i = 0; i < 5; i++){
			if(("白い恋人達").equals(getSongname(i))){
				System.out.println("クリスマスは終わったよ");
			}else{
				System.out.println("テンション打ち上げウィィィィィ");
			}
		}
	}
	
	public static String getSongname(int index){
		switch(index){
		case 0: return "白い恋人達";
		case 1: return "白い恋人達";
		case 2: return null;
		case 3: return "シュラバ★ラ★バンバ";
		default: return null;
		}
	}
}

確かにこれならNullPoは出ません。
実行結果が変わってしまうので要注意ですが
NullPoを出さないテクニックの1つとして
知っておいて損は無いのではないかと思います。


最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す