みなさまこんにちは。
Numataです。
今回はboolean型(真偽値)について解説します。
Javaをイチから学んでいる方は、型の概念を理解できたところで、
このような疑問を持つでしょう。
・booleanっていつ使うの?
・booleanってどうやって使うの?
・booleanって要はyesかnoでしょ?0か1で良くない??
めちゃくちゃわかります!
私も当初、booleanの使い道のイメージが全くつかず、
学習を後回しにしていました。
いくつもプログラムに接するうちに、
booleanについてだんだん理解するようになりましたが、
接する度に混乱していました。笑
学習し始めから概念や使い方を掴んでおくと、
その後の学習がスムーズに進められるので、
型の概念を覚えた段階で、booleanについてもう一歩学習することを
おすすめします!
もちろん、学習時期はいつでも良いです!
ある程度学習を進めた中で、booleanが使われだして混乱しているあなたも必見です!
それではいきましょう!
もくじ
booleanは繰り返しや分岐の条件式で使われます。
boolean(真偽値)は、true か false を変数として持つ基本型です。
基本型なので、trueやfalseは文字列として持っているわけではありません。
あくまでも、trueかfalseを変数として持っているのです。
true・falseは、いろいろな感覚で理解している方がいると思います。
多いのは〇か×、yesかno あたりですかね。
感覚的にはそれでOKです。
大切なのは、変数に2択(true・false)のデータしか入っていないということです。
2択を変数として持っているという概念さえ押さえておけばOKです!
booleanの概念が使われるのは、条件式の判定時です。
if 文、while 文、for 文では、条件式を作ります。
if(条件式)、while(条件式)、for(初期化;条件式;後処理)
皆さんこの条件式をどのようにとらえているでしょうか。
例えば以下の例文。
おそらく”numが10以下の時”ととらえていると思います。
1 2 3 4 5 6 |
int num = 0; if (num <= 10) { System.out.println(num + "は10以下です。"); } |
”numが10以下の時” 確かにそうです。
しかしJavaは、
条件式の中身がtrueの時
ととらえています。
どういうことでしょう。
今回のプログラムでいうと、
if文で、条件式が判定されます。
ここでの判定のされ方は、
num <= 10 の結果がtrueかどうか
です。つまり、今回は
0 <= 10
がtrueかどうかです。
<(小なり)や>(大なり)など比較演算子を用いた式の結果は、
trueかfalseで定義できます。
if文やwhile文等は、条件式の中身が、trueの時実行されます。
この考え方はめちゃくちゃ重要です。
分岐(if文)や繰り返し(while文やfor文)は
条件式の結果をboolean型で判断し、trueの時実行されます!
if文で見てみましょう
1 2 3 4 5 6 7 8 9 10 11 12 |
int num = 0; if(num == 0) { //0==0はtrueだからif文の処理が実行される System.out.println("numはゼロです。"); } String str = "あいうえお"; if(str.equals("あいうえお")) { //equalsメソッドは、戻り値がboolean System.out.println("strはあいうえおです。"); } |
条件式の中身はboolean型で判定されるという見方をすると、
2つの例文の見方が変わってくると思います。
numは0だからif文が実行される
という思考回路から、
0 == 0はtrueだから実行される
という思考回路に変わっていることが重要です。
このような考え方をすると、
boolean型を戻り値として返すメソッドの使い方が見えてきます。
equalsメソッドはString型の文字列の比較をするときに使われます。
直前の変数(または文字列リテラル)と、引数に受け取った文字列を比較し、
同値ならtrue、異値ならfalseを返します。
if文は条件式がtrueの時、実行されますよね。
そのため、if文の条件式で戻り値がboolean型のメソッドを実行することができます。
while文で見てみましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//while文ブロックで使う例文 int num = 1; while(num <= 10) { //1<=10はtrue、2<=10はtrue...11<=10はfalse System.out.println(num + "周目です。"); num++; } while(true) { //条件式はboolean型で判断⇒boolean型のリテラルが書ける System.out.println("無限ループ"); } boolean flg = true; int num = 0; while(flg) { //numに0~9の値を入れる Random ran = new Random(); num = ran.nextInt(9); System.out.println(num); //5が出たらflgをfalseに変える if(num == 5) { flg = false; } } |
条件式の中身はboolean型で判定されます。
繰り返しでも条件を考える思考回路を
numが10以下の間
から
num<=10がtrueの間
に変えましょう。
条件式をboolean型で判定するため、Javaは結局、式をboolean型に変形します。
ということは、元からboolean型を記述できるのです。
無限ループで用いられるwhile(true)という表現は、
条件式にそのままboolean型のリテラルが書かれており、
trueという値が変わることがないため、無限ループになっているわけです。
3つ目のwhile文を見てみましょう。
条件式にboolean型の変数を指定しています。
つまり、flg(Flagの略。よく使われます。)
という変数の中身がtrueである限り繰り返されます。
今回のプログラムは、num==5になったらfigにfalseを再代入しています。
flgがfalseになる→条件式がfalseになる→while文が終了する
という流れです。
このように、while文の条件式に変数を置いて起き、
while文の中で特定の条件に当てはまった時、falseに書き換える
という処理を組むこともあります!
どんな時も、条件式はboolean型で判定されます!
Javaが条件式を最終的にboolean型に変形しているから、
もともとboolean型のリテラルを書いてもOK!
booleanの考え方を身につけていると今後が楽です!
いかがでしたでしょうか。
重要なことは、条件式の見方を変えることです。
numが0以下の時
↓
num <= 0 がtrueの時
この考え方さえつかめれば、今後条件式に困ることはなくなるでしょう!
ご覧いただきありがとうございました。
コメント