Flutter Tips
【Java超初心者編 #3】true・falseを使いこなそう(前編)

※この記事は、論理演算と計算の優先順位に関する記事の前編です。

涼羽01
前回「System.out.println」で色々計算しましたよね。面白かったです! 今回もカッコいいプログラム、書いていきたいです!
先生01
はい、今回もよろしくお願いします。

前回の「System.out.println」のプログラムはこちら↓↓↓

https://2nd-step.net/system-out-println/

「演算」「演算子」とは(復習)

先生02
まずは前回のおさらいです。姫野さん、「演算」「演算子」とは何でしたか?
涼羽27
復習はバッチリです、任せてください! 「演算」は計算のことで、「演算子」は何の計算をするかの記号、でしたよね!
先生01
その通りです。式に基づいて演算(≒計算)を行なうことを「演算」、演算の種類を指定する記号のことを「演算子」と呼びます。
涼羽11
見やすくするために、演算子の前と後ろに半角スペースを入れるんですよね。
先生01
仰る通りです。現時点で学ぶべき主要な演算子は以下の通りです。

・算術演算子「+」「-」「*」「/」
・比較演算子「==」「!=」「<」「<=」「>」「>=」
・論理演算子「!」「&&」「||」

涼羽21
算術演算子は良いとして、論理演算子に比較演算子……何だか難しそうな名前ですね……。
先生02
慣れてしまえば簡単です。一つ一つ丁寧にステップを踏んでいきましょう。

真偽値 ~「はい」のtrueと「いいえ」のfalse~

先生01
比較演算、論理演算を行なう前に、「真偽値」について触れておきましょう。
涼羽10
しんぎち……「真」「偽」って何ですか? マコト? ニセ?
先生02
簡単に言うと「はい」「いいえ」のことですよ。2択を表す概念です。Javaにおいては、真偽値のことをboolean(ブーリアン)値とも呼びます。
涼羽28
なるほど……。真偽値は「はい」「いいえ」の2択。覚えました!
先生01
ちなみに前回まででも「値」が登場しています。姫野さん、何だかわかりますか?
涼羽20
ええと……、数と文字ですか?
先生01
厳密に言うなら「数値」と「文字列」です。

・数値「10」「-100」「0.3」
・文字列「"あいうえお"」「"タピオカココナッツミルク"」「"10"」「"+-*/"」「"true"」
・真偽値「true」「false」

涼羽26
そうそう、ダブルクォーテーションで囲むのが文字列でしたよね!
先生02
文字列と区別するために、true, falseはダブルクォーテーションで囲まないでくださいね。
涼羽27
わかりました!

真偽値は値の一種で、「true(真)」「false(偽)」の2択を表す概念です。
文字列とは異なるので、ダブルクォーテーションでは囲みません。

比較演算をしてみよう

先生02
それでは比較演算の内容に入っていきましょう。
涼羽16
「比較演算」……って、何かを比べるんですか?
先生01
その通りです。2つの値が同じか、異なるか、大きいか、小さいかを比較するのが、比較演算です。
涼羽09
へー……。例えばどんなのですか?
先生04
実際にやってみましょうか。以下のプログラムを実行してみてください。
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(true == true);
		 System.out.println(true == false);
		 System.out.println(false == true);
		 System.out.println(false == false);
	}

}
実行結果true
false
false
true
先生04
演算子「==」が何を意味しているか、わかりますか?
涼羽17
うーん……。「==」の左と右が同じかどうか……ですか? イコールの記号が使われてますし。
先生05
その通りです。「A == B」は、「AとBは同じですか」と翻訳できます。AとBが同じ場合はtrueを、異なる場合はfalseを返します。
涼羽27
「==」は「AとBは同じですか」……覚えました!
先生01
それでは次は、「!=」の演算子を使ったプログラムを実行してみましょう。
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(true != true);
		 System.out.println(true != false);
		 System.out.println(false != true);
		 System.out.println(false != false);

	}

}
実行結果false
true
true
false
涼羽18
えーと……。「!=」の意味はよくわからないんですが、何か実行結果がさっきと逆になってるような……。
先生05
さすがです、よく気が付きましたね。
涼羽19
「!」って何なんですか? 数学で出てきた、階乗? ですか……?
先生01
論理演算のところで詳しく説明しますが、「!」は「NOT」です。
涼羽23
のっと。……ってことは、「!=」はノットにイコールがくっついてるから、「ノットイコール」ですか?
先生02
はい。「!=」は「ノットイコール」で合っています。具体的な意味は何だと思いますか?
涼羽20
わかるような、わからないような……。「!=」の左と右がノットイコールですか、だから、違ってますか、とかですか?
先生05
ご名答。「A != B」は、「AとBは異なりますか」と翻訳できます。AとBが異なる場合はtrueを、同じ場合はfalseを返します。
涼羽25
だから「同じですか」の演算子「==」とは逆の結果が出るんですね! 納得です。
先生02
「==」と「!=」を上手く使いこなしてくださいね。
涼羽27
が、頑張ります!

「==」は、==の左側と右側が同じであればtrue, 異なればfalseを返します。「A == B」は「AとBは同じですか」と翻訳できます。
「!=」は、!=の左側と右側が異なればtrue, 同じであればfalseを返します。「A != B」は「AとBは異なりますか」と翻訳できます。

先生02
さて、ここまでは真偽値の比較演算を見てきましたが、数値でも比較演算ができます。
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(123 == 123);
		 System.out.println(123 != 123);
		 System.out.println(123 == 999);
		 System.out.println(123 != 999);

	}

}
先生01
実行結果を予想してみてください。
涼羽02
そんなの簡単ですよ! 1行目は「123と123は同じですか」で、123と123は同じだからtrue。ってことは、2行目は逆にすればいいからfalseです! 「123と123は異なりますか」だし。
先生02
その調子です。
涼羽01
3行目は「123と999は同じですか」だけど、違うからfalseですね。4行目はその逆だからtrue。どうですか?
実行結果true
false
false
true
涼羽28
やったー! わたしって天才!
先生02
では次の実行結果はどうなると思いますか?
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(123 == 120 + 3);
		 System.out.println(123 == 12 + 3);

	}

}
涼羽23
計算もできちゃうんですね! 1行目は文句なしのtrueですよね。
先生01
そうですね。
涼羽25
2行目は……前にやった「文字列結合」に見せかけた引っかけ問題ですか? でも、その手には乗りませんよ、文字列には""をつけるから! 123は15とは違うから、2行目はfalseです!
実行結果true
false
先生02
いいですね。次の実行結果はどうでしょう?
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(123 < 200);
		 System.out.println(123 > 100);
		 System.out.println(123 <= 123);
		 System.out.println(123 >= 123);

	}

}
涼羽15
先生、どの演算子も知ってるようで知らない子です……。
先生01
数学と同じように考えてみてくださいね。数値での比較演算では「>」(大なり)・「<」(小なり)・「>=」(大なりイコール)・「<=」(小なりイコール)も使えます
涼羽23
「>=」とか「<=」って、矢印的な何かかと思ってました。数学では「≧」「≦」って縦に書くけど、プログラミングでは横に書くんですね。
先生02
書き方は異なりますが、やり方は数学と同じです。
涼羽24
やり方は数学と同じってことは……うーんと、1行目は「123は200より小さいですか」で、2行目は「123は100より大きいですか」って意味で合ってますか?
先生02
はい。
涼羽26
じゃあ、どっちもtrueですね!
先生02
その通りです。3行目と4行目はどうでしょうか?
涼羽26
あ、わかった気がします! 3行目は「123≦123」だから、「123は123以下ですか」。4行目は「123≧123」だから「123は123以上ですか」。「123以下」にも「123以上」にも123が入ってるから、どっちもtrueで良いと思います!
実行結果true
true
true
true
先生05
正解です! では、以下の実行結果はどうなるでしょうか?
package pkg;

public class Lesson1 {

	public static void main(String[] args) {
		 System.out.println(123 < 123);
		 System.out.println(123 > 123);

	}

}
涼羽16
プログラムの意味は「123は123より小さいですか」と「123は123より大きいですか」ですよね? ……ええと、比べる数が同じ時はどうすればいいんでしたっけ……?
先生04
先程の <= や >= とは異なり、< や > にはイコールがついていませんね。イコールのついている「ある数以上・以下の数」には、「ある数」自身が含まれます。一方、イコールのついていない「ある数より大きい・小さい数」には、「ある数」自身が含まれません。
涼羽25
なるほど……? あ、よく考えてみたら、「A君はB君よりイケメン」っていう時、A君とB君のイケメン度は同じじゃないですもんね。A君のほうがB君よりイケメン度が大きい! これを表すとイケメン度は「A君 > B君」ですね! もし「A君はB君以上にイケメン」つまりイケメン度が「A君 >= B君」だったら、A君のほうがB君よりイケメンかもしれないし、2人のイケメン度が同じ可能性もあるってことですね。
先生07
(イケメン度……? いや、ツッコミは入れないでおこう)
涼羽21
ってことは、どっちもfalseでしょうか……?
実行結果false
false
先生10
(何事もなく話が戻った……) はい、その通りです。

数値での比較演算では、「==」「!=」の他に、「>」(大なり)・「<」(小なり)・「>=」(大なりイコール)・「<=」(小なりイコール)も使えます。

後編に続きます。

おすすめの記事