PR

Java:if文(if/else)で条件分岐→5つのポイントを3分で解説

Java

if文(条件分岐)は、与えられた条件が「真(true)」のときのみ特定の処理を実行する仕組みです。たとえば「もし○○ならば、この処理をする」というように、プログラムの分岐を実現します。条件に応じて処理を変化させることで、より柔軟で複雑な動きをするプログラムを作ることができます

このページでは初心者がif文(if~else)について理解すべき主なポイントを5つに絞って3分で分かりやすく解説していきます。

スポンサーリンク

Java:if文の構文ルール

ポイント 基本的な構文ルール

if (条件式) {
    // 条件式が true のときに実行したい処理
}
  • 条件式boolean 型の結果を返す必要があります。Java では、C言語やC++のように 0 や非0といった数値ではなく、true または false のみが条件式として使えます。
  • 条件式が true の場合のみ { } ブロック内が実行されます。
int score = 85;

if (score >= 80) {
    System.out.println("合格です!");
}

// score >= 80 が true のときのみ「合格です!」と表示

if文は、指定した条件が「真(true)」かどうかを判断するために利用します。#条件は括弧()内に記述。→例えば、ある変数ageが18以上であるかどうかをチェックする場合は以下の通り。

if (age >= 18) {
    // 条件が真のときに実行されるコード
}

この例では、age >= 18が条件です。この条件が「真=つまりageという変数が18以下」ならば、if文の中のコードが実行されます。>=は「以上」という意味の比較演算子です。

条件は複数設定することができます(例えばAかつB,AまたはBなど)。これについてはポイント5で解説します。

ポイント1:コードブロック

条件が真である場合に実行されるコードを波括弧{}で囲みますが、この部分をコードブロックと言います。例えば、年齢が18歳以上の場合に「あなたは成人です」と表示したい場合、Javaのコードは↓のように感じになります。

if (age >= 18) {
    System.out.println("あなたは成人です");
}

avaのif文では、実行する文が1つだけの場合コードブロック {} を省略することが可能です。

int num = 10;

if (num > 5)
    System.out.println("numは5より大きい"); // コードブロックなし
  • if 文の直後の1文のみが適用されるため、複数行の処理が必要な場合はコードブロック {} を使うべきです。
  • ネストした場合の可読性が悪くなるため、省略は推奨されません。

サンプルコード 意図しない動作の例

int num = 10;

if (num > 5)
    System.out.println("numは5より大きい");
    System.out.println("これは常に実行される");

コードブロック {} を省略することは可能だが、可読性や意図しない動作を避けるため、基本的には {} をつけるのが推奨です。

ポイント2:if ~ else 文

条件が偽(false)の場合に何かを実行したい場合の処理も記述することもできます。その際はelseを使い、if文の直後にelseブロックを追加して、条件が偽の時に実行されるコードを書きます。

ポイント if~else 構文ルール

if (条件式) {
    // 条件式が true のときの処理
} else {
    // 条件式が false のときの処理
}
  • 使用例
int score = 75;

if (score >= 80) {
    System.out.println("合格です!");
} else {
    System.out.println("不合格です。");
}

// score >= 80 が true → 「合格です!」
// score >= 80 が false → 「不合格です。」
if (age >= 18) {
    System.out.println("あなたは成人です");
} else {
    System.out.println("あなたは未成年です");
}

↑のコードを実行すると、ageが18未満であれば、「あなたは未成年です」と表示されます。

ポイント3:if ~ else if ~ else 文

複数の条件を順番に判定したい場合は、else if を追加します。Java では else if は必要なだけ続けて書くことができます。

if (条件式1) {
    // 条件式1が true のときの処理
} else if (条件式2) {
    // 条件式1 は false だが条件式2が true のときの処理
} else {
    // 上記いずれの条件も満たさないときの処理
}

使用例

int score = 90;

if (score >= 90) {
    System.out.println("評価: A");
} else if (score >= 80) {
    System.out.println("評価: B");
} else if (score >= 70) {
    System.out.println("評価: C");
} else {
    System.out.println("評価: D");
}

/*
score >= 90 が真なら「評価: A」
上記が偽で score >= 80 が真なら「評価: B」
上記が偽で score >= 70 が真なら「評価: C」
それ以外なら「評価: D」
*/

ポイント4:if文と比較演算子

Javaでも他のプログラミング言語同様、比較演算子を使って数値や変数の比較を行います。

比較演算子とは、2つの値を比較しその比較結果が真(true)か偽(false)かを判定するために使われる特殊な記号や演算子のこと。以下がその一覧です。

#普通に数学を勉強していればどれも直感的に理解できるものです。

演算子説明結果
==等しい5 == 5true
!=等しくない5 != 4true
<より小さい3 < 5true
>より大きい10 > 7true
<=以下(以下)5 <= 5true
>=以上(以上)5 >= 4true

これらの演算子を使って、プログラム内で数値や他のデータ型の比較を行うことができます。

public class ComparisonExample {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;

        // 等しい
        System.out.println("a == b: " + (a == b));  // 出力: a == b: false

        // 等しくない
        System.out.println("a != b: " + (a != b));  // 出力: a != b: true

        // より小さい
        System.out.println("a < b: " + (a < b));   // 出力: a < b: true

        // より大きい
        System.out.println("a > b: " + (a > b));   // 出力: a > b: false

        // 以下
        System.out.println("a <= b: " + (a <= b)); // 出力: a <= b: true

        // 以上
        System.out.println("a >= b: " + (a >= b)); // 出力: a >= b: false
    }
}

ポイント5:if文と論理演算子(AND/OR/NOT)

複数の条件を組み合わせたい場合は、論理演算子を使用します。論理演算子とは、条件を組み合わせたり、条件を反転させたりするために使われる特殊な記号や演算子です。これらを用いることで複数の条件を1つの式にまとめたり、条件の真偽を変えたりすることが可能です。

論理演算子は、どのプログラミング言語においても活躍するもので、知っておくと非常に役立ちます。

演算子名称説明
&&論理積(AND)すべての条件が真(true)であれば真。(つまり、AかつB。
||論理和(OR)少なくとも一つの条件が真であれば真。(つまり、AまたはB。
!論理否定(NOT)条件の真偽を反転(つまり、〇〇ではない)。

以下のJavaのコードは、上記の論理演算子を使って複数の条件を評価する方法のサンプル。この例では、特定の条件下で異なるメッセージを表示します。

public class LogicalOperatorsDemo {
    public static void main(String[] args) {
        int age = 20;
        boolean isStudent = true;
        boolean hasTicket = false;

        // 論理積(AND)の例
        if (age > 18 && isStudent) {
            System.out.println("You are an adult student.");
        }

        // 論理和(OR)の例
        if (isStudent || hasTicket) {
            System.out.println("You can enter the student event.");
        }

        // 論理否定(NOT)の例
        if (!hasTicket) {
            System.out.println("You need a ticket to enter.");
        }
    }
}

最初のif文では、年齢が18歳を超えているかつ学生であるかを確認します(&&)。両方の条件が真のときに「You are an adult student.」と表示されます。

2番目のif文では、学生であるかチケットを持っているかのどちらか一方が真であれば「You can enter the student event.」と表示されます(||)。

同様に最後のif文では、チケットを持っていないかを確認し(!)、その条件が真であれば「You need a ticket to enter.」と表示されます。

if文の基本はこれだけ。特に、論理演算子(AND/OR)とかの使い方に迷う人がいるかもしれませんが、躓きやすいのはその辺だけです。

まとめ Javaのif文

  1. 条件の設定
    • if文は括弧()内に書かれた条件が真(true)であるかをチェック。この条件が真ならば、if文に続くコードブロック(波括弧{}内の部分)が実行される。
  2. コードブロック
    • 条件が真の場合に実行される命令を波括弧{}で囲む。ここに記述したコードは条件が満たされたときに実行される。
  3. else文(オプション)
    • if文の後にelseを使用すると、条件が偽(false)の場合に実行されるコードブロックを定義できる。この部分は任意(あってもなくてもOK)。
  4. 比較演算子
    • 条件を書く際には、比較演算子(例:==, !=, <, >)を使用して値を比較する。
  5. 論理演算子
    • 複数の条件を組み合わせる場合は、論理演算子(例:&&(AND)、||(OR)、!(NOT))を使う。

合わせて確認! Java:Switch文による条件分岐のコツを3分で解説

if文の動作原理をさらに詳しく

最後に脱・初心者向けの解説を加えておきます。

ここからはコードの書き方ではなく、書いたコードが裏側でどのような仕組みで動いていくのか?に焦点を当ててご説明します。

if文の動作原理を整理

  1. プログラムが if 文に到達する
    メソッド内で順次コードを実行していく過程で、if 文まで来たら条件式を評価します。
  2. 条件式の評価
    if (条件式) の部分で、Java は条件式を評価して true または false を得ます。
    • 例:score >= 80 という条件式なら、変数 score の値と 80 を比較し、ブール値を生成します。
  3. 条件に応じたブロックの実行
    • 条件式が true{ } の中に書かれた命令が実行される
    • 条件式が falseelse のブロックがあればそちらを実行。else if があれば順次評価していく
  4. 条件式の評価後、次の命令へ
    ブロック内のコードが終わったら、if 文のブロック終了後の次の命令へ進みます。

Java の内部的な処理(コンパイラとバイトコードの観点)

Java ではソースコードがコンパイルされると、JVM(Java仮想マシン)が解釈するバイトコードに変換されます。if 文の条件分岐に関連する命令は、たとえば以下のような分岐命令が使われます。

  • if_icmpge(整数比較で「>=」ならばジャンプする)
  • if_icmpgt(整数比較で「>」ならばジャンプする)
  • if_acmpeq(参照同士の比較で「==」ならばジャンプする)
  • goto(指定のラベルへ無条件ジャンプする)
    ...など

具体的には、Javaコンパイラが if 文を検出すると、if (score >= 80) といった条件式を評価するためにまずレジスタ(あるいはスタック上)で score の値を取り出し、80との比較を行います。そして比較結果が真か偽かによって、指定された行へジャンプ(バイトコードレベルの分岐)するかどうかが決まります。

実際のソースコードを書いている段階では、これらの低レベルな分岐命令を意識する必要はありません。ただし、Java が if 文をどのように実行しているかを深く知りたい場合、このようなバイトコードレベルで「比較→条件分岐命令→ジャンプ」という流れで動いていることを理解しておくと良いでしょう。

よくある注意点・ベストプラクティス

  1. ブロックを省略しない
    ポイント1でも解説した通り、Javaでは if や else に続く処理が1行の場合{ } を省略できます。ただし、可読性や将来的な拡張を考えると、慣例的には常にブロック { } をつけることが推奨されます。
int score = 85;

if (score >= 80) 
    System.out.println("合格です!");

// 省略可能:if の直後に1行だけの処理 (System.out.println()) がある。
// { } をつけなくても正しく動作する。
int score = 75;

if (score >= 80) 
    System.out.println("合格です!");
else 
    System.out.println("不合格です。");

// if と else のどちらも1行ずつしかないため、 { } なしで書ける。

複数行の処理がある場合にはもちろん{}は省略できません。

でも、コンパイルエラーにはならないパターンもあります。

int score = 85;

if (score >= 80)
    System.out.println("合格です!");
    System.out.println("おめでとうございます!");

// 誤解を招く書き方!
// if (score >= 80) の影響を受けるのは 1行目のみ("合格です!" だけ)。
// "おめでとうございます!" は if 文の外にあるため、常に実行される。
  • 条件式を複雑に書きすぎない
    1つの if 文で何でもかんでも判定しようとすると条件式が読みにくくなります。場合によっては条件式を分割するか、メソッド化するなどの工夫を行うと可読性が向上します。
  • ==equals() の使い分け
    文字列(String)などのオブジェクト比較は == ではなく equals() メソッドを使用します。
String str = "Hello";
if (str.equals("Hello")) {
    System.out.println("文字列はHelloです");
}
  • Boolean の直接判定を活用
    変数がすでに boolean 型なら、== true== false を省略してそのまま判定できます。
boolean isMember = true;
if (isMember) {
    // そのまま使える
}
タイトルとURLをコピーしました