Javaのif・else・ else ifを極める!複数条件での分岐や三項演算子。
この記事では、JavaにおけるIf文の使い方を応用的な例も交えながら説明していく。
If文はその名の通り「もしもこの値がこうならこのアクションを行え」といった「条件に基づく指示」をおこなうための構文。If文を始めとする「条件分岐」はプログラムの中でよく使われる重要な要素なので確実に抑えておこう。
この記事では、以下のような人たちを対象としている。
- プログラミング未経験でJavaの基礎的な使い方を勉強したい人
- プログラミングの知識はあるがJavaでのif文の使い方を確認したい人
- Javaを使った業務経験は充分にあるが自分の知識を整理したい人
この記事では、複数条件での条件分岐や三項演算子と呼ばれるif文の省略系も紹介するので、中級者の人も最後まで目を通してみてほしい。
Javaのif文の使い方
では、if文の使い方を勉強していこう。
条件分岐はプログラミングにおいて核をなすオペレーション。コードの書き方は異なるもののどのプログラミング言語にもif文は存在する。
if(もし〜ならば)
まずは以下のコードに目を通してほしい。
public class AgeVerifier { public static void main(String []args) { int age = 12; if (age < 18) { System.out.println("18歳以下の方は登録できません。"); } } }
このごくシンプルなif文を使ったプログラムの例だ。ここではユーザの年齢をチェックし、もし18歳未満であれば指定した文字列を表示するという内容になっている。変数ageの値を18以上に設定すると文字は表示されなくなるはずなので、試してみてほしい。
()の中には条件、{}の中にアクションを記述する。文でいうと「もし()なら{}を実行せよ」となる。
= < >などの演算子について復習したい人はこちらの記事を読んでほしい。
波カッコ内の実行するコードが1行のみである場合は波カッコ{}は省略できる。
if (age < 18) System.out.println("18歳以下の方は登録できません。");
else(それ以外の場合は)
もし上記のコードにおいて年齢が19歳以上の場合もなにかテキストを表示したい時はどうすればいいだろうか?ここで使うのがelseである。
elseを使えばifの条件に当てはまらなかった場合のアクションを指定することができる。日本語でいうならば「それ以外の場合は」となる。
if (age < 18) {
System.out.println("18歳未満の方は登録できません。");
} else {
System.out.println("登録します。"); // 年齢が18歳以上の場合はこちらのコードが実行される
}
変数ageの値を18以上に指定して文字が出力されか確認してみよう。
else if(ではなく〜なら)
else ifは日本語でいうと「(ひとつ目の条件)ではなく〜なら」となる。else ifは必ずif文の後に使われる。前章の例を使ってelse ifも説明しよう。
今までの条件に加え「18歳以上であっても20歳未満であれば親の同意が必要」という条件が加わった場合を例にして考えてみよう。
新しい条件をelse ifを使い前章のコードに付け加えると次のようになる。
if (age < 18) {
System.out.println("18歳未満の方は登録できません。");
} else if (age < 20) {
System.out.println("登録するには親の同意が必要です。");
} else {
System.out.println("登録します。"); // 年齢が18歳以上の場合はこちらのコードが実行される
}
これも変数ageの値を18や19にして、思った通りにプログラムが動作するか確認しよう。
なお、上記のコードは以下のように書き換えることもできる。他にもどのような書き方ができるか考えてみるもいいトレーニングになるだろう。
if (age >= 20) {
System.out.println("登録します。"); // 年齢が18歳以上の場合はこちらのコードが実行される
} else if (age >= 18) {
System.out.println("登録するには親の同意が必要です。");
} else {
System.out.println("18歳未満の方は登録できません。");
}
異なるデータ型を使った例
前章では数値型の変数を用いてif文の使用方法を説明した。もちろんブール型や文字型といったJavaで使用できるその他のデータ型をif文の条件として使用することもできる。ここでは、他の例を見ていこう。
boolean型を使った例
まずは実践においてもっともよく使用されるboolean型を用いたif文を見てみよう。
以下のコードではユーザが登録済みのユーザかどうかを確認して結果に基づきテキストを表示している。
boolean isRegistered = true;
if (isRegistered) {
System.out.println("ログインして下さい。");
} else {
System.out.println("会員登録して下さい。");
}
変数isRegisteredがtrueであればログインを促すメッセージが、falseであれば会員登録を促すメッセージが表示される。
if(Registered)はif(isRegistered == TRUE)と同じ意味である。boolean型は変数の前に!を付ければ真逆の条件として使用できる。つまり、if(!Registered)はif(isRegistered == FALSE)と同じということになる。
String型を使った例
次にString型を使った例を見ていこう。こちらも実践でよく使われるパターンだ。
String text = "これはサンプルテキストです。";
if (text.contains("サンプル")) {
System.out.println("サンプルという文字を含みます。");
} else {
System.out.println("サンプルという文字を含みません。");
}
上の例では、変数textに指定した文字列「サンプル」が含まれるかどうかを条件としている。変数textの文字列を変更してみて、正しいテキストが出力されるかどうか確認してみよう。
Stringの文字列が完全に一致するかチェックしたい場合はequalsメソッドを使おう。
複数条件のif文
次に複数の条件を持つif文の例を見ていこう。複数の条件を持つif文にはANDとORの2つのタイプがある。
ANDを使った複数条件
JavaではAND条件は&&を使って示す。
boolean conditionA = true;
boolean conditionB = false;
if (conditionA && conditionB) {
System.out.println("条件に当てはまります。");
} else {
System.out.println("条件に当てはまりません。");
}
conditionA・conditionBの両方がtrueだった時のみに「条件に当てはまります。」が出力されるはずなのでbooleanの値を変えて試してみてほしい。
ORを使った複数条件
JavaではOR条件は||を使って示す。
boolean conditionA = true;
boolean conditionB = false;
if (conditionA || conditionB) {
System.out.println("条件に当てはまります。");
} else {
System.out.println("条件に当てはまりません。");
}
この場合はconditionA・conditionBのいずれかがtrueであれば「条件に当てはまります。」が出力されるはずだ。
ANDとORが混同する場合
次にひとつの条件式にANDとORが混同するパターンを考えてみよう。
if (conditionA && conditionB || conditionC) {
System.out.println("条件に当てはまります。");
} else {
System.out.println("条件に当てはまりません。");
}
このようなANDとORが混同する式では、どの組み合わせで条件が満たされるのかが分かりにくい。こういった場合は、通常の数学式と同様に丸カッコを使って数式のまとまりを指定することができる。
if ((conditionA && conditionB) || conditionC)
三項演算子を使った記述
簡単な条件文は三項演算子と呼ばれる省略した書式を用いて条件型のコードを記述することもできる。効率的に使えばコードの読みやすさを格段に高めることができるので、ぜひ使い方を覚えておいてほしい。
三項演算子の記述は以下のようになる。
condition ? actionA : actionB;
例を挙げてみると、
if (condition) {
System.out.println("条件に当てはまります。");
} else {
System.out.println("条件に当てはまりません。");
}
上記のif・elseを使った5行の条件式が三項演算子を使うと以下のように一行で書けてしまう。
System.out.println(condition ? "条件に当てはまります。" : "条件に当てはまりません。");
数値型を使った例を挙げてみると
int age = 21;
int price = age < 20 ? 980 : 1580;
System.out.println("料金は" + price + "円です。");
上記の例では、2行目で三項演算子を使い年齢に応じた料金を取得して、3行目でそれを出力している。