「もし●●の場合は■■の処理を実行する」といったプログラムを表現するためには、真偽値と条件分岐の理解が必要です。
プログラミングで条件分岐を使わないことはほぼ無いので、とても重要な箇所となります。
ここでは Java で条件分岐を表現するための構文と、真偽値について学習します。
今回の学習内容
真偽値について
Boolean(ブーリアン)型とも呼ばれ、値は true
(真)か false
(偽)の 二つしかありません。
「できる」か「できない」、「するべき」か「してはいけない」、「実行済み」か「実行していない」など、フラグ(flag)を立てる時に使用されます。
値は Boolean型を表す boolean
を 用いて宣言します。
Booleanの例
boolean isApple = true;
boolean canFly = false;
System.out.println(isApple); // true
System.out.println(canFly); // false
is
やcan
、should
などから始まる名前を付けることで、変数(もしくは関数)が Boolean型 であることを明示し可読性を向上することができます。
比較演算子
比較演算子( >=、<=、<、>、==、!=)を使用して二つの値を比較することができます。
比較を行った結果は Boolean型 で返却されます。
演算子 | 使い方 | 意味 |
---|---|---|
>= | x >= y |
x が y 以上なら true |
<= | x <= y |
x が y 以下なら true |
< | x < y |
x が y 未満なら true |
> | x > y |
x が y より大きいなら true |
== | x == y |
x と y が同等なら true |
!= | x != y |
x と y が同等ではないなら true |
比較演算子の例
int x = 10, y = 9;
System.out.println(x >= x); // xはy以上のため true
System.out.println(x <= y); // xはy以下ではないため false
System.out.println(x < x); // xはx未満ではないため false
System.out.println(x > y); // xはyより大きいため true
System.out.println(x == y); // xとyは同等ではないため false
System.out.println(x != y); // xとyは同等ではないため true
以下のように変数に代入して使用することもできます。
boolean isMatch = 10 == 10;
boolean isBig = 10 < 8;
System.out.println(isMatch); // true
System.out.println(isBig); // false
論理演算子について
論理演算子を使うことで「10 < 8 または 10 == 10なら真」のように複数の条件から一つの真偽値を得ることができます。
演算子 | 使い方 | 意味 |
---|---|---|
&& | x && y |
x と y 両方が true であれば true |
|| | x || y |
x と y どちらかが true であれば true |
! | !x |
x の反対(true であれば false) |
論理演算子の例
int x = 10, y = 9;
System.out.println(x >= x && x <= y); // 右辺が false のため false
System.out.println(x < x || x > y); // 右辺が true のため true
System.out.println(!false); // false の反対 のため true
System.out.println(x < y || (x >= y && x != 8)); // 右辺のカッコ内が true のため true
一番下の例のように、丸括弧(()
)で囲むことで、複数の条件から一つの評価を得ることができます。
ショートサーキット評価
論理演算子は左から右に評価されます。
例えば、true || false
である場合、左辺で既に結果が確定しているため右辺の評価を省略します。
if文で条件分岐させる方法
もし条件が 真(true
) なら「真のときの処理」、偽(false
) なら「偽のときの処理」のような分岐処理を実装することができます。
if文の構文
条件が「真」の場合にのみ処理を行う書き方は次のようになります。
if( 条件式 ) { 条件式が真だった場合の処理 }
else {}
を記述すれば「偽」の場合の処理を実装することができます。
if( 条件式 ) { 条件式が真だった場合の処理 } else { 条件式が偽だった場合の処理 }
条件が「偽」の場合のときに更に条件を指定したい場合は else if (条件){}
を用いることができます。
if( 条件式1 ) { 条件式1が真だった場合の処理 } else if ( 条件式2 ) { 条件式1が偽で条件式2が真だった場合の処理 } else { いずれも偽だった場合の処理 }
if文の例
「条件」には Boolean型 が返されるものを設定する必要があります。
int x = 10, y = 9;
if (true) {
System.out.println(true); // 実行
}
if(x == y) {
System.out.println("xとyは同等です");
} else {
System.out.println("xとyは異なります"); // 実行
}
if(x < 10 || x > 20) {
System.out.println("xは10未満またはxは20より大きいです");
} else if (x < 11) {
System.out.println("xは11未満です"); // 実行
} else {
System.out.println("xは11以上20以下です");
}
if文のネスト(入れ子)
if文の中に if文を記述することを ネスト といいます。
ネストしすぎると可読性が損なわれるため、ネストの深さは最大でも 2 〜 3 程度を目安にしましょう。
int x = 10, y = 9;
if(x < 20) {
if(x > y) {
System.out.println("xは20より小さくyより大きい"); // 実行
}
}
三項演算子
三項演算子は、条件によって実行する処理を分けることができます。
if文と異なるのは、簡易的(一行)に条件と式を記述できる点です。
条件式 ? 真の式 : 偽の式;
三項演算子の例
x
が y
より大きければx
を、そうでなければy
を z
に代入する使用例です。
int x = 10, y = 9;
int z = x > y ? x : y;
System.out.println(z); // 10
以下のようにメソッド を式に設定することもできます。
int z = x > y ? test() : y;
もし null
が値として代入されていた場合に、空文字を代入したい場合は以下のように記述します。
String demo = null;
demo = demo == null ? "" : demo;
System.out.println(demo); // ""
switch文で条件分岐させる方法
switch文は、予め決められた値と一致した場合に、その値に設定されている処理を実行するためのものになります。
switch文の構文
switch ( 式 ) { case 値1 : 式 が 値1 と同等なときの処理 break; case 値2 : 式 が 値2 と同等なときの処理 break; case 値3 : 式 が 値3 と同等なときの処理 break; default: どの case にも該当しないときの処理 }
switch文の使用例
switch文の式には String または int、enum の何れかが返る式を設定できます。
例えば、この式に String型 の式を設定した場合は、case
には String型の値を設定しなければなりません。
String animal = "猫";
switch(animal) {
case "猫":
System.out.println("にゃー"); // 実行
break;
case "犬":
System.out.println("わん");
break;
case "カラス":
System.out.println("カァー");
break;
}
default句
caseの値には default
を一つだけ設定できます。
この default句 は case の値に該当しなかった場合に実行されます。
String animal = "ひつじ";
switch (animal) {
case "猫":
System.out.println("にゃー"); // 実行
break;
case "犬":
System.out.println("わん");
break;
case "カラス":
System.out.println("カァー");
break;
default:
System.out.println(animal + "の鳴き声"); // ひつじの鳴き声
}
break句
break 句は処理を抜ける際に使用します。
switch文では、caseの最後にbreak句を使用し、処理を抜けます。もし、break
の記述がなければ下の case も順次実行されます。
String animal = "犬";
switch (animal) {
case "猫":
System.out.println("にゃー");
case "犬":
System.out.println("わん"); // 実行
case "カラス":
System.out.println("カァー"); // 実行
}