広告

Java : if文の基本 (文法)

プログラムをある条件で分岐させたい…そんなときに使うのが if文です。
Javaに限らず、プログラミング言語にはなくてはならない基本的な文法ですね。

本記事では、そんな if文の基本的な使い方をご紹介します。


if文

if文(イフぶん)は、プログラミング言語において、真理値に従って「もしXならば、Yせよ、さもなくばZせよ」というような条件実行の「文 (プログラミング) 」で、制御構造のひとつである。if else文と呼ばれることもある。

if文は、プログラムを条件分岐させるための制御文です。

if (条件式) {
    ... then文 ...
}

これが基本形となります。

条件式が true となる場合、then文 が実行されます。
条件式が false となる場合、then文 は実行されません。

次のコードは、条件式が true になる例です。
※System.out.println は、値をコンソールに出力するためのメソッドです。

final var num = 5;

if (num > 0) {
    System.out.println("OK!");
}

// 結果
// ↓
//OK!

条件式は

num > 0

の部分です。
num 変数は 5 なので、5 > 0、つまり true というわけですね。

条件式が true なので、then文である

System.out.println("OK!");

が実行されます。
結果としてコンソールに "OK!" の文字が表示されました。

then文 には、複数の文を書くこともできます。

final var num = 5;

if (num > 0) {
    System.out.println("OK! : 1");
    System.out.println("OK! : 2");
    System.out.println("OK! : 3");
}

// 結果
// ↓
//OK! : 1
//OK! : 2
//OK! : 3

それでは、もう少し詳しく見ていきましょう。


条件式

if (条件式) {
    ... then文 ...
}

条件式は、結果が boolean(真偽値) となる のみ許容します。
boolean にならないものはコンパイルエラーとなります。

例えば <> による大小の比較や、== による比較は、結果が boolean となる式です。

// 式 : 5 > 3
final var exp1 = 5 > 3;
System.out.println(exp1); // true

// 式 : 4 < -1
final var exp2 = 4 < -1;
System.out.println(exp2); // false

// 式 : 10 == 10
final var exp3 = 10 == 10;
System.out.println(exp3); // true
// コンパイルOK
final var num = 5;

if (num > 3) {
}

if (num < -1) {
}

if (num == 10) {
}

もしくは、結果が boolean となるメソッドの呼び出しも OK です。
例えば、文字列の比較に使う equals メソッドは boolean を返します。

final var exp1 = "abc".equals("abc");
System.out.println(exp1); // true

final var exp2 = "abc".equals("xyz");
System.out.println(exp2); // false
// コンパイルOK
final var str = "abc";

if (str.equals("xyz")) {
}

複数の条件式を使いたい場合は &&|| といった論理演算も使えます。

final var exp1 = 5 > 3;
System.out.println(exp1); // true

final var exp2 = "abc".equals("xyz");
System.out.println(exp2); // false

final var exp3 = exp1 && exp2;
System.out.println(exp3); // false

final var exp4 = exp1 || exp2;
System.out.println(exp4); // true
// コンパイルOK
final var num = 5;
final var str = "abc";

if (num > 3 && str.equals("xyz")) {
}

if (num > 3 || str.equals("xyz")) {
}

足し算、引き算など +- を使った式は、結果が数値となります。
boolean ではないので if文の条件式には使えません。

// 式 : 5 + 3
final var exp1 = 5 + 3;
System.out.println(exp1); // 8

// 式 : 4 - 1
final var exp2 = 4 - 1;
System.out.println(exp2); // 3
// コンパイルエラー
final var num = 5;

if (num + 3) {
}

if (num - 1) {
}

補足

  • Java以外のプログラミング言語には、条件式に boolean 以外を許容しているものもあります。
    例えば C言語では、条件式に数値も許容しています。 0 は false、それ以外は true として扱います。
  • しかし、Java では厳密に boolean のみを許容します。0 や 1 といった数値を条件式に使うとコンパイルエラーになります。

条件分岐

if (条件式) {
    ... then文 ...
}

条件式が true の場合、then文 が実行されます。
条件式が false の場合、then文 は実行されません。

これにより、プログラムを条件によって分岐させることができます。

コード例を見てみましょう。

条件式が true になる例 条件式が false になる例
final var num = 5;

System.out.println("-- if start --");

if (num > 0) {
    System.out.println("OK!");
}

System.out.println("-- if end --");

// 結果
// ↓
//-- if start --
//OK!
//-- if end --
final var num = -1;

System.out.println("-- if start --");

if (num > 0) {
    System.out.println("OK!");
}

System.out.println("-- if end --");

// 結果
// ↓
//-- if start --
//-- if end --
final var str = "abc";

System.out.println("-- if start --");

if (str.equals("abc")) {
    System.out.println("OK!");
}

System.out.println("-- if end --");

// 結果
// ↓
//-- if start --
//OK!
//-- if end --
final var str = "xyz";

System.out.println("-- if start --");

if (str.equals("abc")) {
    System.out.println("OK!");
}

System.out.println("-- if end --");

// 結果
// ↓
//-- if start --
//-- if end --

なんとなく if文のイメージがつかめましたでしょうか。


{ } の省略

if (条件式)
    then文

then文が 1つの文 のみの場合は { } を省略することができます。

final var num = 5;

// 通常の書きかた
if (num > 0) {
    System.out.println("OK! : 1");
}

// こう書いたり…
if (num > 0)
    System.out.println("OK! : 2");

// こう書くこともできます。
if (num > 0) System.out.println("OK! : 3");

// 結果
// ↓
//OK! : 1
//OK! : 2
//OK! : 3

ただし、{ } を省略すると、思わぬコーディングミスを誘発してしまうかもしれません。

次のコード例を見てみましょう。

var num = -5;
if (num > 0) num++; num *= 10;

System.out.println("num : " + num);

さて、ぱっと見て、どのような結果になるかわかりますでしょうか。

num 変数はマイナスなので、if文の条件式は false になります。
よって、then文は実行されないから num = -5 がそのまま出力されるのかと思いきや…結果は次のようになります。

num : -50

なぜこのような結果になるのか考えてみます。

if文の { } を省略したので、then文は

num++;

1つの文 だけが対象となります。
その後ろの

num *= 10;

の文は、if文の外側となります。
つまり次のコードと同じ意味になります。

if (num > 0) {
    num++;
}
num *= 10;

{ } がないと、どこまでが then文なのか分かりにくくなることがあります。
個人的には、1つの文のみの場合でも { } は省略しないほうがよいんじゃないかな…と思います。

if-else文

if-else文は、if文に else が追加された形です。
それ以外は if文と同じです。

if (条件式) {
    ... then文 ...
} else {
    ... else文 ...
}

条件式が true の場合は then文 が実行されます。
条件式が false の場合は else文 が実行されます。

if文が分かっていれば、if-else文も分かりやすいかな、と思います。

final var num = 5;

if (num > 0) {
    System.out.println("then!");
} else {
    System.out.println("else!");
}

// 結果
// ↓
//then!

if (num < 0) {
    System.out.println("then!");
} else {
    System.out.println("else!");
}

// 結果
// ↓
//else!

if-elseif文

if-elseif は、if文に else if が追加された形です。
else if はいくつでも繋げることができます。また、後述しますが else を追加することもできます。

if (条件式1) {
    ... then文1 ...
} else if (条件式2) {
    ... then文2 ...
}

条件式1 が true の場合、then文1 が実行されます。
条件式1 が false で、条件式2 が true の場合、then文2 が実行されます。

コード例で見ていきましょう。

final var num = 7;

if (num < 5) {
    System.out.println("num < 5");
} else if (num < 10) {
    System.out.println("num < 10");
} else if (num < 20) {
    System.out.println("num < 20");
}

// 結果
// ↓
//num < 10

if-elseif文の条件式は、上から順番にチェックされていきます。
そして、条件式が true になったら then文を実行して if文は終わります。それ以降の条件式はチェックされません。

上記のコード例では、次のような処理になります。

処理 コード
1 はじめに num < 5 の条件式がチェックされます。
num 変数は 7 なので、条件式は 7 < 5 です。
結果は false なので次へ。
if (num < 5) {
    System.out.println("num < 5");
}
2 次の条件式である num < 10 がチェックされます。
条件式は 7 < 10 …結果は true なので then文を実行して if-elseif文は終了します。
else if (num < 10) {
    System.out.println("num < 10");
} 
3 最後の条件式 num < 20true になりますがチェックされません。
then文も実行されません。
else if (num < 20) {
    System.out.println("num < 20");
}

if-elseif文 には else を追加することもできます。

if (条件式1) {
    ... then文1 ...
} else if (条件式2) {
    ... then文2 ...
} else {
    ... else文 ...
}

すべての条件式が false の場合、else文 が実行されます。

final var num = 100;

if (num < 5) {
    System.out.println("num < 5");
} else if (num < 10) {
    System.out.println("num < 10");
} else {
    System.out.println("else!");
}

// 結果
// ↓
//else!

補足

switch式

プログラムを条件分岐をさせたい場合、if文の代わりに switch式 を使うこともできます。
列挙型(enum) のような網羅性のある分岐をしたい場合には switch式 のほうが便利かもしれません。

enum Fruit {
    BANANA,
    APPLE,
    ORANGE,
}

final var fruit = Fruit.APPLE;

switch (fruit) {
    case BANANA -> System.out.println("Banana!");
    case APPLE -> System.out.println("Apple!");
    case ORANGE -> System.out.println("Orange!");
}

// 結果
// ↓
//Apple!

関連 :

公式ドキュメント

14.9. The if Statement
The if statement allows conditional execution of a statement or a conditional choice of two statements, executing one or the other but not both.

さらに詳しく if文について知りたい場合は、公式のJava言語仕様に記載があります。
(残念ながら公式の日本語訳はないようです)

まとめ

if文を使うと、プログラムを条件分岐させることができます。
なくてはならない基本的な文法なので、よく理解して使いたいですね。


関連記事

ページの先頭へ