
javaのbooleanとは?条件判断にぴったりなデータ型booleanの使い方
Javaのbooleanは真偽値型と呼ばれるもので、値がtrueかfalseのどちらかになるものです。
booleanにピッタリなのは、変数で表現したいことが白黒はっきりしていて、さらに区別が二種類だけでいい場合です。
booleanはJavaの色々なところによく顔を出します。例えばif文、for文、while文などです。これらの構文を使いこなすためにも、booleanの理解はしっかりしておきたいですね。
この記事では、そんなbooleanの考え方や実際の使い方について、初心者向けにお伝えします。
※この記事のサンプルは、Java 10の環境で動作確認しています
目次
1.booleanはtrue/falseのどちらかだけになるもの
boolean(ブーリアン)は、true(真、トゥルー)かfalse(偽、フォルス、フォールス)のどちらかだけになる、プリミティブ型(基本データ型)です。
真と偽だと、どうにも言葉が堅苦しくてとっつきづらいですが、以下のようなイメージを持っておきましょう。
- true → 肯定的な意味合い:はい、OK、有効、正しい、存在する、条件を満たす、許可された、含む、要求される、続く
- false → 否定的な意味合い:いいえ、NG、無効、正しくない、存在しない、条件を満たさない、許可されない、含まない、要求されない、続かない
2.booleanを使ってみよう!
2-1.boolean型変数の宣言、値の代入
boolean型変数の宣言の仕方は「boolean 変数名」です。
初期値の設定方法や値の代入の仕方もintなどと同じルールですが、値にはtrueとfalseのどちらかしか取れません。
// 変数の宣言と値の設定を別にする場合 boolean b1; b1 = true; // 変数の宣言と初期値の設定を同時にする場合 boolean b2 = false; // booleanに値を代入してみる b1 = false; b2 = true; // boolean変数からの値の代入もできる boolean b3 = b1; // → b3はfalseになる // Javaのbooleanは数値や文字列ではないので、それらを代入できない // 以下は全てコンパイルエラーとなる boolean b4 = 0; boolean b5 = null; boolean b6 = ""; boolean b7 = "true";
2-2.if文の条件式で使ってみる
if文の条件式は、booleanだけを受け取ります。
trueであればそのブロックの処理が実行され、どのブロックでも条件が合わない場合は、elseの処理が実行されます。
boolean b1 = true; if (b1) { System.out.println("true!"); // → b1はtrueなのでこちら } else { System.out.println("false!"); } boolean b2 = false; if (b2) { System.out.println("true!"); } else { System.out.println("false!"); // → b2はfalseなのでこちら } if (b1 && b2) { System.out.println("true!"); } else { System.out.println("false!"); // → true && falseはfalseになるので、こちら }
最終的にbooleanになる間には色々な計算やメソッド呼び出しがあってもいいのですが、結果は必ずbooleanでなければコンパイルエラーです。
2-2-1.三項演算子で使ってみる
if文の特殊な形として、if-elseを使った変数設定などを1行で書ける、三項演算子(?)があります。
条件式 ? trueの時の値 : falseの時の値
三項演算子は「:」で区切られた二つの値の内のどちらかを戻します。三項演算子は文ではなく演算子なので、何かの値を戻すのです。
三項演算子の条件式も、if文と同様にbooleanだけ受け取ります。条件式がtrueになるかで、どちらの値を戻すかが決まります。
boolean b = true; String s = b ? "真" : "偽"; // → sが指す先のStringは"真"になる // 三項演算子でやっていることは以下のif文と同じ String s2; if (b) { s2 = "真"; } else { s2 = "偽"; }
三項演算子は、使う人は「プログラムが短くなる」「値の指定漏れがない」のような理由でよく使いますし、使わない人は全く使いません。
でも、プログラムで目にした時にびっくりしないよう、こういうものがあることは覚えておきましょう。
2-3.for文の条件式で使ってみる
for文の条件式もbooleanだけを受け取ります。trueならfor文の内容を実行し、falseなら実行しません。
boolean b = true; for (int i = 0; b; i++) { System.out.println(i); if (i > 5) { b = false; } }
このfor文は条件式にbooleanの変数を使っていますので、変数の内容がfalseになった時に、for文が終わります。
iが5を超えた時(6以上)に初めてfalseになりますので、0、1、2、3、4、5、6が出力されます。
2-4.while文の条件式で使ってみる
while文の条件式もまた、booleanだけを受け取ります。trueならfor文の内容を実行し、falseなら実行しません。
boolean b = true; int i = 0; while (b) { System.out.println(i); if (i > 5) { b = false; } i++; }
このwhile文も条件式にbooleanの変数を使っていますので、変数の内容がfalseになった時に、while文が終わります。
iが5を超えた時(6以上)に初めてfalseになりますので、0、1、2、3、4、5、6が出力されます。
3.booleanな変数・メソッドは、名前が何よりも大事
booleanはtrueとfalseの二種類の決まった値だけだからこそ、変数名やメソッド名の付け方がとても大事です。
3-1.大丈夫ですか?
例えば、大丈夫かどうか誰かに聞く時、普通は「大丈夫ですか?」と聞きますよね。
そんな問い掛けに「はい」と「いいえ」で答えるなら、はい→大丈夫、いいえ→大丈夫ではない、となります。
これをbooleanにすると、okという変数名になって、true→はい→大丈夫、false→いいえ→大丈夫ではない、です。
boolean ok = ....; if (ok) { System.out.println("大丈夫です"); } else { System.out.println("大丈夫ではありません"); }
否定演算子(!)でbooleanの意味を逆にしても伝わるでしょう。
「大丈夫、ではない」ということだと、見ればわかるからです。
boolean ok = ....; if (!ok) { System.out.println("大丈夫ではありません"); } else { System.out.println("大丈夫です"); }
3-2.大丈夫ではないのですか?
では今度は「大丈夫ではないのですか?」といきなり聞かれたら、少し答えを考えませんか?
こちらも「はい」と「いいえ」で答えるなら、否定の言葉「ではない」が入っているので、意味がひっくり返って、はい→大丈夫ではない、いいえ→大丈夫、となります。
これもbooleanにすると、notOkという変数名になって、true→はい→大丈夫ではない、false→いいえ→大丈夫、です。
boolean notOk = ....; if (notOk) { System.out.println("大丈夫ではありません"); } else { System.out.println("大丈夫です"); }
否定演算子で意味を逆にすると、これもちょっと分かりづらくなります。
「大丈夫ではない、ではない」というように二重の否定になるからです。
boolean notOk = ....; if (!notOk) { System.out.println("大丈夫です"); } else { System.out.println("大丈夫ではありません"); }
ここで問題なのは、普通の人がtrue/falseに持っているイメージと、変数名から読み取れる意味が反対だからです。
notOkという変数名にしたプログラマだけは、変数の意図が分かっているので別に困りません。でも、このokとnotOkが一つのプログラム中に混ざっていると、他のプログラマが混乱するかもしれないと思いませんか?
3-3.良い名前はtrue/falseが自然に紐付くもの
booleanの変数やbooleanを戻すメソッドを作る時、名前のお勧めは、名前とtrue/falseが自然に紐付くものです。変数やif文などをまとめて一つの英語の文章にして読んでみて、すっ…と自然に読めるとベストです。
そのコツの一つとして「大丈夫ですか?」のように、否定の言葉を入れないというものがあります。名前に「ではない」という言葉を含めなければ、true/falseをそのまま自然に解釈できるからです。
それに、Javaの標準APIにあるbooleanを戻すメソッドでも否定の言葉は入っていません。例えば、isEmpty(空っぽだ)、contains(含む)、equals(等しい)、matches(一致する)のようにです。これらのメソッド名はJavaの慣習とも言えるものです。普段から慣れておいて、積極的に真似するとわかりやすいプログラムになるでしょう。
皆が読みやすいプログラムを作るためには、こういう所にも気を配っていきましょう。
4.最後に
Javaのbooleanは、trueとfalseのどちらかの値を取るものです。使い方は他の数値のプリミティブ型とほとんど変わりません。
booleanは、if文、for文、while文の条件式に使われ、条件式がtrueであれば~となっているのが共通した動きです。
booleanの変数名・メソッド名として良いものは、trueとfalseがどういう状態・意味であるか、読み手が自然に分かるものです。そんな分かりやすいbooleanのコツの一つには、名前に否定の言葉を含まないということがあります。
Javaのbooleanを活用するには、booleanのクラス版である「Booleanクラス」も知っておくと大変便利です。
この記事を読み終わった後の次の目標としては、Booleanクラスの使い方を学ぶと良いでしょう。
コメント