疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【Java】不要なelse

今回はif文におけるelseについての記事になります。
if文はどの言語でもかなり序盤に触れると思います。
それと同時にelseも学習すると思いますが、意外とこれってややこしい。

例えば以下のソースを見てください。

ソース

boolean flag = true;

if(!flag) {
	return;
} else {
	System.out.println("OK");
}

boolean型のflagという変数を用意し、その中身によって条件分岐しています。
条件の変数の前に「!」が付いているため、flagがfalseの時はreturnする処理ですね。
よくあるやつです。
そしてelseの時、つまりtrueの場合は「OK」と表示します。

別にちゃんと動きますし、正しくelseを使えてるわけですから変だとすら思いませんよね。
でもこんな感じのソースを書いて上司に見てもらったときに、「if文って知ってる?」と言われました。
何回か会話を交わすもどこがおかしいのかわからず。

考えに考え、ようやく言っている意味がわかりました。
こちらが正解のソースです。

ソース

boolean flag = true;

if(!flag) {
	return;
}
System.out.println("OK");

要はelseがなくても動くんです。
条件に合致していた場合はreturnするため、それ以降の処理は動きません。
そして、条件に合致していない場合は条件内の処理は動きません。
まさにif文の基本中の基本です。

改めてそう思うと、elseって使わない方が良いんじゃないか?とか思っちゃいます。
実際には、使わないで済むなら使わない方がいいと思いますが、可読性のことも考えてみます。

例えば、「決まった値÷変数の値の結果に余りがあるかどうか」を判断する場合。

ソース

int value = 10;

if(value == 0) {
	return;
}

int result = 10 % value;
		
if(result > 0) {
	System.out.println("余りがあります。");
} else {
	System.out.println("余りがありません。");
}

まず初めに、変数valueの値を決めてすぐに0か判断し、0の場合はreturnさせています。
これは0除算を行うと例外が発生するためです。
こういう、特定の条件のみこうしたい、といった内容のものは単発のif文で書くと良いかと思います。

次に、肝心の余りの判断です。
このelseはあった方が可読性は上がるんじゃないでしょうか。
resultの値が0よりも大きければ余りがある、そうじゃなければ余りがない、という判断です。


ボーっとコーディングしているとついつい不要なelseを使ってしまいがちです。
正直な話、プログラミングは正しく動いていれば正解ではあるのですが、やはり今後のメンテナンスのことを考えると可読性が高い方が良いです。
簡単な処理ならまだしも、長いソースで処理が多いものは追うのが大変です。
出来る限り、簡潔で可読性の高いコーディングをしたいですね。

今回は以上になります。