論理演算子
条件が 2 つあるだけで、判定が入れ子になる
「3000 円以上、かつ会員である」なら送料無料。こういう条件を素直に書こうとすると、判定の中にもう 1 つ判定を入れることになり、中括弧が二重、三重と深くなっていきます。条件が 3 つに増えたら、もう追えません。
論理演算子を使うと、複数の boolean を 1 本の式にまとめられます。使うのは次の 3 つです。
&&— 左右の両方がtrueのときだけtrue。「かつ」||— 左右のどちらかがtrueならtrue。「または」!—trueとfalseをひっくり返す。「〜でない」
Java
int total = 3500;
boolean isMember = true;
boolean freeShipping = total >= 3000 && isMember; // true
boolean needsSignUp = !isMember; // false&& は全員分の許可証を求める厳しい関所、|| は誰か 1 人持っていれば通してくれる甘い関所、と考えると取り違えません。
「または」でつないだら、誰でも通ってしまった
「かつ」のつもりで || を書くと、条件の片方さえ満たせば通ってしまいます。組み合わせを全部並べると、2 つの性格の違いがはっきり見えます。
A | B | A && B | A || B |
|---|---|---|---|
true | true | true | true |
true | false | false | true |
false | true | false | true |
false | false | false | false |
&& が true になる行は 1 行だけ、|| が false になる行も 1 行だけです。日本語の「かつ」を && に、「または」を || に置き換えるところで取り違えていないか、書いたあとに声に出して読み直す価値があります。
なお && は || より先に評価されるので、a || b && c は a || (b && c) の意味になります。両方を混ぜるときは括弧で囲んでおくのが安全です。
左が false なら、右は読まれない
&& は左が false になった時点で、右を評価せずに false を返します。|| は左が true になった時点で打ち切ります。これを短絡評価と呼びます。
Java
String code = null;
boolean isValid = code != null && code.length() == 8;
// false になる。右の code.length() は実行されないcode が null のとき、右の code.length() は呼ばれません。先に安全を確かめてから中身を触る、という順番が && 1 つで書けます。左右を入れ替えると null のまま length() を呼んでしまい、実行時エラーで止まります。
条件が長くなってきたら、
boolean canEnter = ...;のように名前を付けた変数へ一度受けます。式を読み解かなくても、名前だけで何を判定しているのかが伝わります。
要件
- クラス名は
Solution、メソッド名はcanVoteにすること - 引数は
int ageとboolean isCitizenの 2 つ、戻り値の型はboolean age >= 18とisCitizenを&&で結んで判定すること
入出力例
canVote(20, true) → true
canVote(20, false) → false
canVote(17, true) → false
canVote(18, true) → true