【JAVA】硬いコーディング

みなさんは、いつもif文やcase文など何気なく書いていませんか?

変数 code が 1001 のときはメソッド methodA を呼び出す。
変数 code が 1002 のときはメソッド methodB を呼び出す。

上記のような条件があった場合、多くの人は

if (code == 1001) {
	methodA();
} else if (code == 1002) {
	methodB();
}


とするのではないでしょうか?


■else を認めない



今回は、『絶対に else を認めるな』というお話です。

これはある現場であったコーディング規約なのですが
必ず下記のように記述をする必要がありました

if (code == 1001) {
	methodA();
} else if (code == 1002) {
	methodB();
} else {
	throw new SystemException("不正なコード値が渡されました。" + code);
}


つまり、if、else if の部分で想定している条件すべてを明確に記載し、
else 文では必ずシステム例外を投げるというものです。


多くの現場を見てきましたが、このように else で
システム例外を報告しているところはありませんでした。


■メリット


この、一番のメリットは、
 不具合があった場合、絶対に見逃すことが無い
ということだと思います。


上のコードを少し改造してみます。


public int test(String strCode){
	int code = 0;
	int ret = 0;

	try {
		code = Integer.parceInt(strCode);
	} catch (NumberFormatException e) {
		new SystemException();
	}
	
	if (code == 1001) {
		ret = methodA();
	} else if (code == 1002) {
		ret = methodB();
	}
	retrun ret;
}


ハイライトの部分が不具合です。

この場合、変数 code には想定外の0が渡ってきます。
ですが、しっかりと else を記載していないので処理が継続してしまい
戻り値に 0 を返してしまいます。

上の例では、例外があがらないため
このような処理が連鎖してしまうと不具合が見つかったとき
どこが不具合の原因なのか非常に見つけにくくなります。

もしかしたら、何年のもの間不正な処理が繰り返されているかもしれません。



■その他のメリット

それ以外にも
 ・else を認めないためテストデータも必然的に正しくなる。
 ・運用時に例外発生した場合でも原因究明が早急に行える。
 ・後から参画したメンバーにも分岐条件が誤解なくはっきりとわかる。
などなど、沢山のメリットがあります。

始めは面倒くさいと思うかもしれませんが、
この甘みを知ってしまうと癖になるコードです。

ぜひ、みなさんも試してみてください。

タグ:java


参考になりましたらクリックしていただけると励みになります。



posted by てる。 at 23:47 | Comment(0) | TrackBack(0) | 【JAVA】覚えて得する TIPS | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。