Javaについて徹底解説!

条件判断にぴったりなデータ型、Javaのbooleanの使い方・考え方!

大石 英人

大石 英人

開発エンジニア/Java20年/Java GOLD/リーダー/ボールド歴2年

Javaのbooleanは真偽値型と呼ばれるもので、値がtruefalseのどちらかになるものです。

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などと同じルールですが、値にはtruefalseのどちらかしか取れません。

// 変数の宣言と値の設定を別にする場合
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になりますので、0123456が出力されます。

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になりますので、0123456が出力されます。


3.booleanな変数・メソッドは、名前が何よりも大事

booleanはtruefalseの二種類の決まった値だけだからこそ、変数名やメソッド名の付け方がとても大事です。

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という変数名にしたプログラマだけは、変数の意図が分かっているので別に困りません。でも、このoknotOkが一つのプログラム中に混ざっていると、他のプログラマが混乱するかもしれないと思いませんか?

3-3.良い名前はtrue/falseが自然に紐付くもの

booleanの変数やbooleanを戻すメソッドを作る時、名前のお勧めは、名前とtrue/falseが自然に紐付くものです。変数やif文などをまとめて一つの英語の文章にして読んでみて、すっ…と自然に読めるとベストです。

そのコツの一つとして「大丈夫ですか?」のように、否定の言葉を入れないというものがあります。名前に「ではない」という言葉を含めなければ、true/falseをそのまま自然に解釈できるからです。

それに、Javaの標準APIにあるbooleanを戻すメソッドでも否定の言葉は入っていません。例えば、isEmpty(空っぽだ)contains(含む)equals(等しい)matches(一致する)のようにです。これらのメソッド名はJavaの慣習とも言えるものです。普段から慣れておいて、積極的に真似するとわかりやすいプログラムになるでしょう。

皆が読みやすいプログラムを作るためには、こういう所にも気を配っていきましょう。


4.最後に

Javaのbooleanは、truefalseのどちらかの値を取るものです。使い方は他の数値のプリミティブ型とほとんど変わりません。

booleanは、if文、for文、while文の条件式に使われ、条件式がtrueであれば~となっているのが共通した動きです。

booleanの変数名・メソッド名として良いものは、truefalseがどういう状態・意味であるか、読み手が自然に分かるものです。そんな分かりやすいbooleanのコツの一つには、名前に否定の言葉を含まないということがあります。

Javaのbooleanを活用するには、booleanのクラス版である「Booleanクラス」も知っておくと大変便利です。

この記事を読み終わった後の次の目標としては、Booleanクラスの使い方を学ぶと良いでしょう。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中