Java の else if を使って複数の条件を分けよう
新人
「先輩、Javaの条件分岐ってifとelseしか使ったことがないんですが、else ifって何に使うんですか?」
先輩
「いい質問だね。else ifは、複数の条件を順番に評価したいときに使うんだ。たとえば、点数に応じて評価を分けたいときに便利なんだよ。」
新人
「なるほど、条件が2つ以上ある場合に使うんですね。どうやって書くんですか?」
先輩
「じゃあ、まずは基本構文から見ていこう。if文の復習も兼ねてね。」
1. else ifとは?
Javaのelse ifは、条件分岐の制御構造のひとつです。ある条件が「真(true)」のときに特定の処理を実行し、もしその条件が「偽(false)」だった場合に次の条件を評価することができます。複数のifをネストするよりもシンプルに書けるため、可読性を高める重要なポイントになります。
まずは、基本的な構文を確認してみましょう。
if (条件1) {
// 条件1がtrueのときの処理
} else if (条件2) {
// 条件1がfalseで、条件2がtrueのときの処理
} else {
// どの条件もfalseのときの処理
}
このように、上から順番に条件を判定していき、最初にtrueになった箇所の処理だけが実行されます。もしすべての条件が当てはまらない場合は、最後のelseブロックが実行されます。
これはプログラムの流れを「分岐」させる基本構造であり、Javaの制御構文の中でも非常に頻繁に使われます。特に「点数」「温度」「年齢」などのように、範囲や段階を分ける処理に最適です。
2. なぜ複数条件の分岐が必要なのか
新人エンジニアがよくつまずくポイントのひとつが「条件を増やすとコードがごちゃごちゃする」という問題です。else ifを使うことで、この問題をきれいに解決できます。たとえば、学生のテストの点数をもとに評価を表示するプログラムを考えてみましょう。
public class ScoreJudge {
public static void main(String[] args) {
int score = 75;
if (score >= 90) {
System.out.println("評価:A");
} else if (score >= 70) {
System.out.println("評価:B");
} else if (score >= 50) {
System.out.println("評価:C");
} else {
System.out.println("評価:D");
}
}
}
評価:B
このプログラムでは、スコアが90点以上なら「A」、70点以上なら「B」、50点以上なら「C」、それ以外は「D」と判定されます。条件が上から順番に評価され、最初に当てはまった条件の処理だけが実行される点がポイントです。
もしifだけを複数書いてしまうと、すべての条件が評価されるため、意図しない複数の出力が起こる可能性があります。else ifを使うことで、ひとつの条件にマッチしたら他の条件はスキップされるため、無駄な処理を防げるのです。
また、Javaのelse ifを使えば、複数のパターンを読みやすく整理できるというメリットもあります。プログラムを他の人が読むときにも「どんな条件で分かれているか」が一目でわかるので、保守性も向上します。
たとえば、実務の現場ではユーザーのステータスを判定したり、エラーコードごとに処理を分けたりといった用途にも使われます。特にWebアプリケーション開発では、Springの@Controller内でリクエストの種類や入力値を条件で振り分けるケースがよくあります。
次のサンプルでは、Springの@Controllerクラス内でelse ifを使って画面遷移を分ける簡単な例を見てみましょう。
@Controller
public class PageController {
@GetMapping("/status")
public String checkStatus(@RequestParam("level") int level) {
if (level >= 80) {
return "high";
} else if (level >= 50) {
return "medium";
} else {
return "low";
}
}
}
このように、リクエストパラメータの値に応じて遷移先を分けることができます。Webアプリケーションでは頻繁に使われるテクニックであり、else ifを理解することはSpring MVCの基礎理解にもつながります。
また、else ifを使うことで「条件の優先順位」を設計するという感覚も身につきます。上の例では、数値が大きいほど高い優先度で条件を評価するようにしています。これは、実務でもロジック設計の重要な考え方です。
Javaの制御構造をしっかり理解しておくと、複雑な業務ロジックでも迷わず実装できるようになります。次のステップでは、このelse ifをさらに応用して、より複雑な条件を整理する方法を学んでいきます。
3. else if文の基本構文と使い方
ここでは、Javaのelse if文がどのように動作するのかを、より具体的に見ていきましょう。ifとelseの基本を理解している人でも、else ifを正しく使いこなすには「条件の順番」と「評価の流れ」を意識することが大切です。
まず、ifとelseだけの場合は、条件が「真」か「偽」かの二択ですが、else ifを使うことで三つ以上の選択肢を作ることができます。たとえば、温度によってメッセージを変える例を考えてみましょう。
public class TemperatureCheck {
public static void main(String[] args) {
int temp = 25;
if (temp >= 30) {
System.out.println("とても暑いです");
} else if (temp >= 20) {
System.out.println("ちょうどいい気温です");
} else {
System.out.println("少し寒いですね");
}
}
}
ちょうどいい気温です
このように、else ifは上から順番に評価され、最初に一致した条件の処理だけが実行されます。つまり、他の条件に当てはまってもスキップされるのがポイントです。条件の順序を誤ると意図した結果にならないため、常に「広い条件よりも厳しい条件を上に書く」というルールを守りましょう。
この評価の流れを理解すると、Javaの制御構造全体の流れも自然とつかめるようになります。プログラムの可読性や保守性を高めるためにも、単に動けばいいという書き方ではなく、読みやすい条件順を意識することが大切です。
4. 実際に複数条件を判定するサンプルを作ってみよう
次に、もう少し複雑な例として、ユーザーの年齢と会員ランクを判定するプログラムを作ってみましょう。このような条件分岐は、実際のシステム開発でもよく登場します。たとえば、特定の条件で割引を適用したり、メッセージを変えたりするケースです。
public class MemberJudge {
public static void main(String[] args) {
int age = 25;
String rank = "gold";
if (rank.equals("platinum")) {
System.out.println("最高ランクの会員です");
} else if (rank.equals("gold") && age >= 20) {
System.out.println("ゴールド会員(成人)です");
} else if (rank.equals("silver") || age < 20) {
System.out.println("一般会員または未成年です");
} else {
System.out.println("条件に該当しません");
}
}
}
ゴールド会員(成人)です
ここでは、論理演算子(&&や||)とelse ifを組み合わせて、複数条件を効率的に判定しています。このように条件を組み合わせると、現実的な判定ロジックを短く書けます。
ただし、複雑にしすぎると読みづらくなるため、条件が多くなったらメソッドを分けたり、switch構文を検討したりすることも大切です。Javaでは、読みやすいコードが信頼される第一歩です。
このようなelse ifの構成は、Webアプリケーションやバックエンド処理でもよく使われます。たとえば、フォーム入力のチェックや、APIリクエストのバリデーションなどで条件ごとにメッセージを変える場合です。
「もしこれならこうする、それ以外ならこう」というロジックをひと目で理解できるように書けると、チーム開発でも非常に重宝されます。
5. Springの@Controller構成でのelse ifの実践例
次に、実際のSpringアプリケーションでelse ifを使う例を見てみましょう。ここでは、リクエストされた商品の在庫数によって、返すビューを切り替えるサンプルを紹介します。開発環境はpleiadesで構築し、Gradleでビルドする前提です。
@Controller
public class StockController {
@GetMapping("/stock")
public String checkStock(@RequestParam("count") int count) {
if (count > 50) {
return "stock_high";
} else if (count >= 10) {
return "stock_normal";
} else if (count > 0) {
return "stock_low";
} else {
return "stock_empty";
}
}
}
上記のコードでは、在庫数に応じて遷移先のHTMLを変えています。countが50以上なら「在庫豊富」画面、10以上なら「通常在庫」画面、1以上なら「残りわずか」画面、0なら「在庫なし」画面というように動作します。
このようにelse ifを使えば、1つのURLリクエストに対して複数の条件を整理して処理を分けられます。Spring MVCでは、リクエストを受け取るメソッドの中で簡潔にロジックを組み立てられるので、初心者にも理解しやすい構造です。
もしこの処理をifだけで書こうとすると、すべての条件を毎回評価してしまい、重複した判定やパフォーマンスの低下につながる可能性があります。else if構文は「一度マッチしたら次をスキップ」するため、より効率的なのです。
また、こうした処理は画面ごとにメッセージを変えるときにも応用できます。たとえば在庫が少ない場合には「残りわずかです」とメッセージを表示し、在庫なしなら「入荷待ちです」と表示するといった工夫です。
ここで大事なのは、条件を数値の大小で分けるだけでなく、ビジネスロジックの優先順位を意識することです。条件の順序を間違えると、上の条件で処理が終わってしまい、意図した判定にならないことがあります。
実務でも、たとえば注文状態の判定やステータス更新など、複数条件を整理して分岐させる場面は非常に多くあります。こうした場合にelse ifを正しく使えるようになれば、Springアプリケーションの設計力がぐっと向上します。
さらに、Javaの制御構造を理解しておくと、後からswitchやenumといった構文に発展させるときもスムーズです。else ifはプログラミング初心者が最初に学ぶ「分岐構造」の中でも、最も重要な基礎になります。
6. else ifを使った複雑な分岐の設計
ここからは、もう一歩進んで「複雑な分岐の設計」について学びましょう。Javaのelse ifは単純な比較だけでなく、条件の優先順位や組み合わせを考慮した設計に使われます。たとえば、ユーザーの状態や日付、時間帯などを組み合わせて処理を分けたい場合などです。
重要なのは「どの条件を先に評価するか」という順序の考え方です。プログラムは上から順番に条件を評価していくため、優先度の高い条件を上に書くことが基本となります。これを怠ると、意図しない分岐に入ってしまうことがあります。
次の例は、時間帯とユーザーの状態によってメッセージを変えるサンプルです。
public class TimeGreeting {
public static void main(String[] args) {
int hour = 14;
boolean isMember = true;
if (hour < 12 && isMember) {
System.out.println("おはようございます、会員さま!");
} else if (hour < 18 && isMember) {
System.out.println("こんにちは、会員さま!");
} else if (hour >= 18 && isMember) {
System.out.println("こんばんは、会員さま!");
} else {
System.out.println("ようこそ!ゲストの方");
}
}
}
こんにちは、会員さま!
このプログラムでは、「時間帯」と「会員ステータス」を組み合わせて挨拶を出し分けています。もしhourの条件を下にずらしてしまうと、正しく判定されない場合があります。つまり、else ifを設計する際は、条件の評価順序と優先度を整理してから書くことが大切なのです。
特に実務では、優先度を意識して条件を書くことが「バグを防ぐ最初の防衛線」となります。設計段階でロジックを図にしておくと、else ifの流れが可視化できて理解しやすくなります。
7. 実務でよくあるelse ifの活用パターン
さて、ここからは実務でよく使われるelse ifの活用パターンを見ていきましょう。最も多いのは「スコア判定」や「ステータスの切り替え」です。業務システムでは、ユーザーのレベルや注文状態、支払い状況などを分岐させる処理が頻繁に登場します。
まずは、スコア判定の例です。複数の条件を整理して、成績に応じたランクを返すようにしています。
@Controller
public class RankController {
@GetMapping("/rank")
public String checkRank(@RequestParam("score") int score) {
if (score >= 90) {
return "rank_a";
} else if (score >= 75) {
return "rank_b";
} else if (score >= 60) {
return "rank_c";
} else {
return "rank_d";
}
}
}
このような構成では、成績や評価に応じて表示画面を切り替えられます。ビジネスシステムでは「Aランクは優秀」「Cランクは改善が必要」など、条件に応じてメッセージを変えるのが一般的です。else ifを使うことで、わかりやすく処理を整理できます。
もう一つよくあるのが「ステータス判定」です。たとえば、ユーザーのログイン状態や注文状態を条件分岐するケースです。次の例を見てみましょう。
@Controller
public class OrderController {
@GetMapping("/orderStatus")
public String checkOrderStatus(@RequestParam("status") String status) {
if (status.equals("new")) {
return "order_new";
} else if (status.equals("processing")) {
return "order_processing";
} else if (status.equals("completed")) {
return "order_done";
} else {
return "order_unknown";
}
}
}
このサンプルでは、注文の状態に応じて遷移先のページを切り替えています。条件の分け方を明確にすることで、処理の意図がはっきり伝わります。業務ロジックでは、状態の管理が重要な役割を持つため、else ifの順序を誤ると結果が大きく変わってしまうことがあります。
また、入力内容をチェックするフォームバリデーションでもelse ifは重宝されます。たとえば、必須項目が未入力の場合や、文字数の範囲を超えた場合などを段階的に判定するのに適しています。
このようにelse if構文は、単なる「条件分岐」ではなく、システム全体のロジック設計を支える重要な要素なのです。
8. 注意点と設計上の工夫
最後に、else ifを使う際の注意点と設計上の工夫について解説します。まず気をつけたいのは「条件の重複」です。複数の条件が重なっていると、上の条件で処理が止まってしまい、下の条件が評価されない場合があります。
たとえば、次のようなコードを考えてみましょう。
if (score >= 50) {
System.out.println("合格");
} else if (score >= 80) {
System.out.println("優秀");
}
この場合、スコアが80点でも最初の条件(score >= 50)が先にtrueになるため、「優秀」とは表示されません。条件が重なるときは、必ず「厳しい条件を先に書く」ようにしましょう。これがJavaの制御構造で最も大切な原則のひとつです。
次に、else ifのネスト(入れ子)が深くなりすぎる場合の注意です。条件が多くなると読みづらくなり、メンテナンスも難しくなります。そのような場合は、条件ごとにメソッドを分けるか、switch文を使うのも良い方法です。
また、複雑な条件を扱うときは「条件の意図をコメントで残す」ことも重要です。特にチーム開発では、後から見た人が理解できるように記述しておくことで、バグを未然に防ぐことができます。
たとえばSpringの@Controller内で処理を分岐する場合、ビジネスルールごとにメソッドを整理すると見通しがよくなります。
@Controller
public class UserController {
@GetMapping("/userType")
public String judgeUser(@RequestParam("age") int age, @RequestParam("member") boolean member) {
if (member && age >= 60) {
return "senior_member";
} else if (member) {
return "general_member";
} else if (age < 20) {
return "student_guest";
} else {
return "guest";
}
}
}
この例では、条件を「会員かどうか」「年齢で分類するか」という2つの軸に分けて整理しています。else ifの順序を工夫することで、コードがシンプルになり、可読性が格段に上がります。
もうひとつのポイントは、処理の分岐を関数化して再利用しやすくすることです。たとえば、ユーザーの種類を判定するメソッドを作っておけば、ほかのコントローラからも同じロジックを使えます。これにより、条件の重複を防ぎ、メンテナンス性を高められます。
つまり、else ifは単なる制御構文ではなく、「ロジック設計の整理術」として活用することが重要です。条件の優先度・評価順序・再利用性を意識して書けるようになると、より実務的なJavaコードが書けるようになります。