プログラミング学習で多くの人が出会う基本的ながらも非常に重要なJavaのif文。条件によって処理を変える、そんなプログラムの頭脳部分を担っています。
この記事では、if文の একদম(まったくの)基本から、実務でも役立つ応用的なテクニックまで、サンプルコードと共に解説します。
この記事で学べること
- Javaのif文の基本的な構文と書き方
- 複数の条件を組み合わせる方法(else if, &&, ||)
- コピペして試せる実践的なサンプルコード
- switch文との違いと正しい使い分け
- 初心者が陥りやすいミスとその対策
Javaのif文とは?
ここでは、プログラミングにおける条件分岐の考え方と、Javaでif文がなぜ必要なのかを解説します。プログラムが状況に応じて動くための、土台となる知識です。
- プログラミングにおける条件分岐とは?
- なぜJavaでif文が必要なの?
プログラミングにおける条件分岐とは?
条件分岐とは、ある条件を満たすかどうかで、次に行う処理を変えることを言います。
日常生活でも、私たちは無意識に条件分岐をしています。
「もし、明日の天気が晴れなら、公園へピクニックに行く」
「もし、ポイントが1000円以上貯まっていたら、景品と交換する」
プログラムの世界でも同じように、特定の条件に応じて動作を変化させるために、if文のような仕組みが用意されているのです。
なぜJavaでif文が必要なの?
もしプログラムにif文がなければ、書かれた命令を上から順に実行するだけで、状況に応じた柔軟な対応ができません。
例えば、ユーザーが入力したパスワードが正しいかチェックしたり、ゲームでキャラクターのHPが0になったらゲームオーバーにしたり、といった処理はif文があって初めて実現できます。
if文を使いこなすことで、プログラムはまるで意思を持っているかのように、状況に応じた賢い振る舞いができるようになります。
まずは覚えたい!Javaのif文の基本的な書き方
if文を使いこなすための第一歩として、最も基本的な構文の形と、実際のコードの書き方を学びます。フローチャートで処理の流れをイメージすると、より理解が深まります。
- if文の基本構文(フローチャート付き)
- 簡単なコードを書いてみよう:年齢判定プログラム
if文の基本構文(フローチャート付き)
Javaのif文は、以下の形で記述します。とてもシンプルなので、まずはこの形を覚えましょう。
if (条件式) { // 条件式が真(true)の場合に実行される処理 }
丸括弧 `( )` の中に条件を書き、波括弧 `{ }` の中に条件が満たされた時に実行したい処理を記述します。
処理の流れを図にすると、以下のようになります。
[処理の開始] ↓ ◇ 条件式を判定 (true) ↓ [波括弧{}内の処理を実行] ↓ [処理の終了]
簡単なコードを書いてみよう:年齢判定プログラム
それでは、実際に簡単なプログラムを書いてみましょう。
20歳以上の場合に「成人です。」と表示するJavaコードです。
public class AgeCheck { public static void main(String[] args) { // 年齢を格納する変数 int age = 25; // もし年齢が20以上なら if (age >= 20) { System.out.println("成人です。"); } } }
実行結果
成人です。
変数`age`の値を`18`などに変えて実行すると、if文の条件を満たさないため何も表示されません。試してみてください。
条件を増やしてみよう!Javaのif-else文とelse if文
if文だけでは「もし〜なら」という一通りの処理しかできませんでした。ここでは、「〜でなかった場合」や「〜ではなく、もし〜なら」といった、より複雑な条件分岐を実現する方法を見ていきます。
- 条件に当てはまらない場合の処理【else】
- 3つ以上の分岐を作りたい【else if】
- if, else if, elseの正しい記述順と実行ルール
条件に当てはまらない場合の処理【else】
`else`を使うと、if文の条件式が偽(false)だった場合の処理を記述できます。「もし〜ならA、そうでなければB」という処理が実現可能です。
public class AgeCheckWithElse { public static void main(String[] args) { int age = 18; // もし年齢が20以上なら if (age >= 20) { System.out.println("成人です。"); } // そうでなければ else { System.out.println("未成年です。"); } } }
実行結果
未成年です。
これで、年齢が20歳未満の場合でもメッセージが表示されるようになりました。
3つ以上の分岐を作りたい【else if】
条件をさらに細かく分けたい場合には `else if` を使います。「もしAなら処理1、そうでなくもしBなら処理2、どちらでもなければ処理3」というように、いくつでも条件を追加できます。
public class ScoreCheck { public static void main(String[] args) { int score = 75; if (score >= 90) { System.out.println("秀です。"); } else if (score >= 70) { System.out.println("良です。"); } else if (score >= 60) { System.out.println("可です。"); } else { System.out.println("不可です。"); } } }
実行結果
良です。
if, else if, elseの正しい記述順と実行ルール
複数の条件を書く際には、記述する順番が重要です。
- 必ず `if` から始まります。
- `else if` は `if` の後、`else` の前に記述します。いくつでも追加可能です。
- `else` は一番最後に記述し、一つしか書けません。
プログラムは上から順に条件式を判定し、最初に真(true)になったブロックの処理だけを実行して、if文全体の処理を抜けます。たとえ下の `else if` の条件も満たしていても、実行されることはありません。
複雑な条件もお任せ!Javaのif文で複数の条件を指定する方法
「AかつB」や「AまたはB」のように、一つのif文で複数の条件を組み合わせたい場合があります。論理演算子という記号を使うことで、複雑な条件判定もシンプルに記述可能です。
(参考: Java™ Language Specification - Expressions)
- 「かつ」を表すAND条件(&&)
- 「または」を表すOR条件(||)
- 「〜ではない」を表すNOT条件(!)
「かつ」を表すAND条件(&&)
`&&` を使うと、複数の条件をすべて満たす場合にのみ処理を実行できます。
// 90点以上、かつ、出席率が80%以上なら合格 int score = 92; double attendanceRate = 0.9; if (score >= 90 && attendanceRate >= 0.8) { System.out.println("合格です。"); }
「または」を表すOR条件(||)
`||` を使うと、複数の条件のうち、いずれか一つでも満たしていれば処理を実行できます。
// クーポンを持っている、または、会員なら割引 boolean hasCoupon = false; boolean isMember = true; if (hasCoupon == true || isMember == true) { System.out.println("割引が適用されます。"); }
「〜ではない」を表すNOT条件(!)
`!` を使うと、条件式の結果を反転(trueならfalse、falseならtrue)させることができます。
// 休日でなければ「営業中です」と表示 boolean isHoliday = false; if (!isHoliday) { System.out.println("営業中です。"); }
Javaのif文を使ったサンプルコード7選
ここまでに学んだ知識を使って、より実践的なサンプルコードを見ていきましょう。自分の手でコードを書き、動かしてみるのが上達への一番の近道です。
- 1. 点数による成績評価(優・良・可・不可)
- 2. 偶数か奇数かを判定する
- 3. うるう年を判定するプログラム
- 4. ユーザーの年齢に応じた入場料金の計算
- 5. ログイン認証のシミュレーション
- 6. 営業時間内かどうかを判定する
- 7. 複数の割引条件を組み合わせた料金計算
点数による成績評価(優・良・可・不可)
else if文を使った基本的な分岐の例です。
int score = 85; if (score >= 80) { System.out.println("優"); } else if (score >= 70) { System.out.println("良"); } else if (score >= 60) { System.out.println("可"); } else { System.out.println("不可"); } // 実行結果: 優
偶数か奇数かを判定する
数値を2で割った余りが0かどうかで判定します。
int number = 10; if (number % 2 == 0) { System.out.println(number + "は偶数です。"); } else { System.out.println(number + "は奇数です。"); } // 実行結果: 10は偶数です。
うるう年を判定するプログラム
少し複雑な条件ですが、AND(&&)とOR(||)の組み合わせで実現できます。
int year = 2024; // 4で割り切れ、かつ100で割り切れない年、または400で割り切れる年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { System.out.println(year + "年はうるう年です。"); } else { System.out.println(year + "年は平年です。"); } // 実行結果: 2024年はうるう年です。
ユーザーの年齢に応じた入場料金の計算
境界値の判定が重要になる例です。
int age = 15; int price; if (age <= 5) { price = 0; // 5歳以下は無料 } else if (age < 18) { price = 500; // 18歳未満は500円 } else { price = 1000; // それ以外は1000円 } System.out.println("料金は" + price + "円です。"); // 実行結果: 料金は500円です。
ログイン認証のシミュレーション
文字列の比較には `equals()` メソッドを使います。
String correctId = "admin"; String correctPw = "password123"; String inputId = "admin"; String inputPw = "password123"; if (inputId.equals(correctId) && inputPw.equals(correctPw)) { System.out.println("ログイン成功"); } else { System.out.println("IDまたはパスワードが違います"); } // 実行結果: ログイン成功
営業時間内かどうかを判定する
AND(&&)を使って時間の範囲を判定します。
int currentTime = 14; // 現在時刻 int openTime = 10; int closeTime = 20; if (currentTime >= openTime && currentTime < closeTime) { System.out.println("営業時間内です。"); } else { System.out.println("営業時間外です。"); } // 実行結果: 営業時間内です。
複数の割引条件を組み合わせた料金計算
ネスト(入れ子)構造を使って、段階的に条件を判定します。
int price = 3000; boolean isMember = true; boolean isBirthdayMonth = false; if (isMember) { // 会員なら10%割引 price *= 0.9; if (isBirthdayMonth) { // 誕生日月ならさらに500円引き price -= 500; } } System.out.println("最終的な料金は" + price + "円です。"); // 実行結果: 最終的な料金は2700円です。
Javaのif文とswitch文はどう違う?使い分けを徹底解説
Javaにはif文と似た働きをする `switch` 文という仕組みもあります。どちらも条件分岐で使いますが、得意なことや書き方が異なります。その違いを理解し、適切に使い分けることで、より読みやすく効率的なコードを書けるようになります。
- もう一つの条件分岐:switch文とは?
- if文とswitch文のメリット・デメリット比較
- どっちを使うべき?現場での判断基準
もう一つの条件分岐:switch文とは?
`switch` 文は、一つの変数の値に応じて、処理を分岐させるのに特化した構文です。
例えば、変数の値が `1` ならAの処理、`2` ならBの処理、`3` ならCの処理…といった具合に、特定の値に一致するかどうかで判断します。
if文とswitch文のメリット・デメリット比較
if文とswitch文には、それぞれ長所と短所が存在します。表で比較してみましょう。
項目 | if文 | switch文 |
---|---|---|
得意な条件 | 範囲指定(例: score >= 90)や複雑な論理条件 | 特定の値との一致(例: signal == 1) |
比較できる型 | boolean型に評価される式なら何でもOK | 整数、文字、文字列、Enumなど一部の型のみ |
可読性 | 分岐が増えるとネストが深くなり、読みにくくなることがある | 分岐が多くても、構造がフラットで読みやすい場合がある |
どっちを使うべき?現場での判断基準
明確なルールはありませんが、一般的には以下のような基準で使い分けられます。
- switch文を使うケース
- 特定の変数の値によって分岐先が決まり、分岐の数が多い場合。(例:メニュー番号に応じた処理の切り替え)
- if文を使うケース
- 上記以外の場合。特に、範囲を指定する条件や、複数の変数を組み合わせた複雑な条件式の場合はif文が適しています。
迷ったときは、まずif文で書けないか考えてみるのが良いでしょう。 if文はswitch文よりも汎用性が高いため、ほとんどの条件分岐はif文で表現できます。
もっと便利に!Javaのif文を使いこなす応用テクニック
基本をマスターしたら、次はコードをより簡潔に、より読みやすくするための応用テクニックを学びましょう。少しの工夫で、プログラムの品質は大きく向上します。
- if文のネスト(入れ子)と注意点
- 条件式をスッキリ書くためのリファクタリング術
- コードを短く書ける「三項演算子」
if文のネスト(入れ子)と注意点
if文の処理ブロックの中に、さらにif文を記述することを「ネスト」または「入れ子」と呼びます。複雑な条件を段階的に判定する際に役立ちます。
しかし、ネストが深くなりすぎると、どこからどこまでが処理の範囲なのかが分かりにくくなり、バグの原因になります。一般的に、ネストは2段階程度までにとどめ、それ以上深くなるようであれば、後述するメソッド化などを検討するのが良いプラクティスです。
条件式をスッキリ書くためのリファクタリング術
`if ( (user.getAge() >= 20 && user.hasLicense()) || user.isSpecialMember() )` のような長い条件式は、一見して内容を把握するのが大変です。
条件判定のロジックを別のメソッドとして切り出すことで、if文の見た目がスッキリし、コードの意図が明確になります。
// 判定ロジックをメソッドに切り出す private boolean isDiscountTarget(User user) { return (user.getAge() >= 20 && user.hasLicense()) || user.isSpecialMember(); } // if文がスッキリする if (isDiscountTarget(user)) { // 割引処理 }
コードを短く書ける「三項演算子」
簡単なif-else文は、「三項演算子」という書き方で1行にまとめることができます。
三項演算子は `(条件式) ? 値1 : 値2` の形で記述します。条件式が真(true)なら値1が、偽(false)なら値2が採用されます。
// if-else文で書いた場合 int age = 20; String message; if (age >= 20) { message = "成人"; } else { message = "未成年"; } System.out.println(message); // 三項演算子で書いた場合 String message2 = (age >= 20) ? "成人" : "未成年"; System.out.println(message2);
コードが短くなる一方、複雑な処理に使うと逆に可読性が下がる場合もあるため、代入する値が変わるだけ、といったシンプルなケースで活用するのがおすすめです。
なぜか動かない?Javaのif文で初心者がハマる落とし穴と対策
意図通りにプログラムが動かないとき、その原因は意外と単純なミスだったりします。ここでは、Javaのif文で初心者が特に間違いやすいポイントと、その対策方法を解説します。
- 比較演算子「==」と代入演算子「=」の間違い
- { }(波括弧)の省略が引き起こすバグ
- boolean型のスマートな判定方法
比較演算子「==」と代入演算子「=」の間違い
最もよくある間違いの一つが、比較を行う `==` と、代入を行う `=` の混同です。
`if (score = 100)` と書いてしまうと、scoreに100を代入する処理になってしまい、条件判定として正しく機能しません。正しくは `if (score == 100)` と書く必要があります。エラーの原因になりやすいため、十分に注意しましょう。
{ }(波括弧)の省略が引き起こすバグ
Javaでは、if文の処理が1行だけの場合、`{ }`(波括弧)を省略できます。
しかし、後から処理を追加した際に `{ }` を付け忘れると、追加した行はif文の条件に関わらず実行されてしまい、意図しないバグを生み出します。
混乱を避けるため、処理が1行であっても常に `{ }` で囲む癖をつけておくのが安全です。
boolean型のスマートな判定方法
boolean型の変数(trueかfalseが入る)を判定する際、`if (isLoggedIn == true)` と書くことができます。間違いではありませんが、少し冗長です。
`isLoggedIn` 自体がtrueかfalseの値を持っているので、`if (isLoggedIn)` と書くだけで「もしisLoggedInがtrueなら」という意味になります。同様に、falseを判定したい場合は `if (!isLoggedIn)` と書くと、よりシンプルで洗練されたコードになります。
まとめ
この記事では、Javaのif文について、基本的な書き方から応用的な使い方、そして初心者が注意すべき点までを解説しました。
- if文は条件によって処理を変えるための基本構文
- `else`や`else if`で条件の分岐を増やせる
- `&&`や`||`で複雑な条件も表現可能
- switch文との違いを理解して使い分けるのが重要
if文は、あらゆるプログラムの動作の根幹をなす、非常に重要な要素です。
if文を自由自在に扱えるようになれば、作れるプログラムの幅が格段に広がります。次は、繰り返し処理を行う「for文」や「while文」を学ぶことで、さらにパワフルなプログラムが書けるようになるでしょう。ぜひ挑戦してみてください。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。