スポンサーリンク
当サイトにはプロモーションが含まれています
※広告で得た収益はすべて利用者さんに還元しています。

【Java】条件式の真髄

みなさん、次のコードは読めますでしょうか?

boolean discountCheck = member ? totalPrice >= 1000 : totalPrice >= 5000;

Javaの入門書だけを学習された方は、コードが全く読めない、あるいは代入式として間違っているのでは?、と思われた方もいらっしゃるのではないでしょうか?

もちろん上記は正しいコードです。もう少し分かりやすいように前後にコードを追加して、きちんと動くプログラムにしてみましょう。

public class Main {
	public static void main(String[] args) {
		boolean member = true;	//会員かどうか(trueなら会員)
		int totalPrice = 2000;	//合計購入金額
		
		boolean discountCheck = member ? totalPrice >= 1000 : totalPrice >= 5000;
		
		if (discountCheck) {
			System.out.println("5%OFF");
		} else {
			System.out.println("割引なし");
		}
	}
}

上記のプログラムを動かしてみると分かりますが、結果は「5%OFF」と出力されます。プログラムの意味としては「会員の場合は1,000円以上のお買い上げで5%オフ、非会員の方は5,000円以上のお買い上げで5%オフ、それ以外は割引なし」というプログラムになっています。

冒頭に示したコードは以下のような構造になっています。

boolean 変数名 = 条件式;

そこで今回お伝えする真髄はこちら。

条件式の真髄①

条件式は変数に代入することができる

四則演算などの計算結果を変数に代入するコードは入門書でもよく出てきますので違和感がないと思いますが、条件式を変数に代入するコードは入門書ではあまり見かけません。ただし、システム開発の現場のソースコードでは今回のような条件式を変数に代入するコードは普通に出てきますので、入門書レベルしか知識のない初心者の方は現場で戸惑うことになるでしょう。この機会に「条件式の真髄」をしっかりと理解しましょう。

条件式を変数に代入するというのは、もちろん条件式自体を変数に代入している訳ではなく、条件式を評価(実行)した結果を代入しているということです。

条件式の真髄②

条件式を変数に代入する際、変数に代入されるのは条件式の評価結果(実行結果)である

四則演算でも同じですが、右辺に計算式や条件式のような式が書かれている場合、変数に代入されるのはその式を評価した結果になります。条件式の場合、評価結果は「真(true)」か「偽(false)」の論理型ですので、条件式を代入する変数の型はJavaでは「boolean型」になります。

条件式(の結果)を変数に代入できるメリットはコードを綺麗に整理できる点にあります。システム開発で書くコードは複雑なものが多いですから、1行で条件を書くと右にどんどん長くなりすぎて読みにくくなってしまいます。読みやすくるためには改行を適宜入れるのも効果的ですが、複雑な条件式の中には大きなまとまりがあったりしますので、大きなまとまり単位で変数を使ってコードを整理することでコードがすごくスッキリしますし、全体の構造が分かりやすくなります。

例えば以下のコードだと読みにくくないでしょうか?

if ( branch.equals("A支店") && branchSales >= 80000000 && departmentAssessment >= 3.0 && post.equals("課長") && assessment >= 6 && sectionAssessment >= 4.0) {
	System.out.println("ボーナスは2.2ヶ月分");
} else if ( branch.equals("A支店") && branchSales >= 80000000 && departmentAssessment >= 3.0 && post.equals("主任") && assessment >= 4 && salesRank >= 10 ) {
	System.out.println("ボーナスは2.1ヶ月分");
} else {
	System.out.println("ボーナスは2.0ヶ月分");
}

上記のコードを変数を使って整理してみましょう。

boolean condition1 = branch.equals("A支店") && branchSales >= 80000000 && departmentAssessment >= 3.0;
boolean condition2 = post.equals("課長") && assessment >= 6 && sectionAssessment >= 4.0;
boolean condition3 = post.equals("主任") && assessment >= 4 && salesRank >= 10;

if ( condition1 && condition2 ) {
	System.out.println("ボーナスは2.2ヶ月分");
} else if ( condition1 && condition3 ) {
	System.out.println("ボーナスは2.1ヶ月分");
} else {
	System.out.println("ボーナスは2.0ヶ月分");
}

今回の条件には「部門に関する条件」と「個人に関する条件」という大きなまとまりがありますので、まとまっている条件ごとに変数に代入し、続くif文は変数を組み合わせた条件式になっています。変数に条件を入れておけば、同じ条件部分はすべて同じ変数で表現できますのでコードもスッキリしますし、全体の構造、if文の条件とelse if文の条件には同一の条件が含まれている、といったこともコードをパッと見ただけで分かるようになりました。

如何ですか?「条件式の真髄」に触れていただけましたでしょうか?

現場で働くエンジニアにとって条件式を変数に代入するという書き方はごくごく当たり前の使い方なのですが、入門書レベルしか勉強していないプログラミング初心者にとっては「え?こんな書き方があるの?」と驚くことでしょう。システム開発の現場では初心者からベテランまでさまざまなレベルのエンジニアたちがコードを触ります。ベテランエンジニアが書くソースコードは洗練されていますのでプログラミング言語に不慣れな初心者の方にはかえって読みにくいかもしれません。入門書を一通り終えたならば次は生きたコードをたくさん読むようにしましょう。今はインターネット上にさまざまなソースコードが共有されていますし、生成AIを利用して自分が書いたコードをレビューしてもらうのもいいでしょう。

現場ではソースコードを書くよりも他人のソースコードを読むことの方が圧倒的に多いです。自分が書いたソースコードはいずれ他の人が引き継ぐことになります。そのときのためにも出来るだけ洗練されたソースコードが書けるように日々研鑽しましょう。

今回も最後までお読みいただき、ありがとうございました。


<前の記事>

<次の記事>

※アイキャッチ画像はChatGPTで作成しています