Swift

【Swift入門 文法編】Bool型(真理値)をマスターしよう

この記事ではSwiftの基本的な型である、Bool型についての基本事項を解説していきます。

プログラミングが初心者も、他の言語をやっていてSwiftは初心者という人にもわかるように説明していきたいと思います。

Bool型とは

Bool型は真を表すtrueか偽を表すfalseのいずれかの値をとる型です。
真か偽を表す値を真理値といいます。

真偽に関しては、高校の数学で出てきた「論理と命題」の単元にでてくる真偽で、その内容と絡む部分がわりと出てきます。

Bool型に関しては、この記事では説明しませんが、if文などの分岐に使用したりします。

代入

trueまたはfalseの値を変数・定数に代入することで、型アノテーションがなかったとしてもBool型として型推論されます。


let a = true   //Bool型
let b = false //Bool型

"true"のように、"で囲むとString型となってしまうので注意です。


let a = "true" //String型
let b: Bool = "false" //コンパイルエラー

比較演算子

Bool型と関わるよく使う身近な例として、比較演算子があります。
比較演算子は左辺と右辺の値を比較してその結果をBool型で返します。

例えば==は左辺と右辺が等しい場合にtrue、等しくない場合はfalseとなります。


let a = "abc"
let b = "abc"
a == b //true

1 == 2 //false

ここでは深く触れませんが、両辺が同じ型でないと比較できないのと、==を使える型と使えない型があります。

Int型を例に上げると、Int型では他にも使用できる比較演算子がいくつかあります。

== 左辺と右辺が一致すればtrue
!= 左辺と右辺が一致しなければtrue
> 左辺が右辺より大きければtrue
>= 左辺が右辺以上であればtrue
< 右辺が左辺より大きければtrue
<= 右辺が左辺以上であればtrue

論理演算

論理演算というのは、真理値に対しての演算です。
否定論理積論理和の3種類が用意されています。

言葉ばかりだとイメージが湧かないので、具体的な例と共に説明していきます。

否定

否定は、真理値の真偽を逆にする論理演算です。
真理値に対して!を一番前にくっつけることで、否定になります。


let a = true //true
let b = !a     //false

let c = !false //true

今回の!の用に変数や定数の前に配置する演算子を前置演算子といいます。

論理積

論理積は、与えられた複数の真理値がすべてtrueであればtrueとなる論理演算です。
&&を使用します。


let a = true && true //true
let b = true && false //false
let c = false && true //false
let d = false && false //false

比較する真理値が3つ以上でも同様に&&でつなげることで使用できます。


let a = true && true && true //true
let b = true && true && false //false
let c = true && false && true //false
let d = true && false && false //false
let e = false && true && true //false
let f = false && true && false //false
let g = false && false && true //false
let h = false && false && false //false

今回の&&の用に2つの変数や定数の間に配置する演算子を中置演算子といいます。

論理和

論理和は、与えられた複数の真理値の少なくとも1つがtrueであればtrueとなる論理演算です。
||を使用します。


let a = true || true //true
let b = true || false //true
let c = false || true //true
let d = false || false //false

こちらも3つ以上でも同様に||でつなげることで使用できます。


let a = true || true || true //true
let b = true || true || false //true
let c = true || false || true //true
let d = true || false || false //true
let e = false || true || true //true
let f = false || true || false //true
let g = false || false || true //true
let h= false || false || false //false

否定・論理和・論理積を組み合わせる

実際に使用する際は、複数条件を組み合わせたりすることもあるので、先程の否定論理和論理積を組み合わせて使用することもよくあるので慣れておきましょう。

複数組み合わせた場合にも左から順番に1つずつ考えていけば大丈夫です。
優先的に計算させたい場合は算数みたいに()で囲みましょう。


let a = false && true || true //true
let b = false && (true || true) //false
let c = !false && (true || true) //true
let d = !false && !(true || true) //false

より読みやすいコードを書くために

ここからは文法とは直接関係はありませんが、Bool型に関しての、より読みやすいコードを書くためのTipsをいくつか紹介していきます。

初心者の方でもし難しければ、軽く読み流して、ある程度文法もわかって、アプリ開発も慣れてきたぐらいで読み返していただくのでも大丈夫です。

Bool型とわかりやすい命名をする

Bool型の変数・定数を定義する際の命名を考えていきます。
Bool型truefalseのいずれかの値なので、名前を選ぶ際には意味を明確にしたほうがいいです。

例えば、以下は良くない例です。


let readPassword: Bool = true

readをどう読むかを考えた場合に、2つの解釈の仕方があります。

  • パスワードをこれから読み取る必要がある
  • パスワードをすでに読み取っている

このように2つの解釈の仕方によって、全く逆の意味になってしまいます。なのでここではreadを使わないほうがいいです。
代わりにneedPassworduserIsAuthenticatedを使ったほうがよいです。

このようにBool型では変数・定数名にishascanshouldなどをつけてわかりやすくすることが多いです。

例えば、String型の値に対して.isEmptyとつなげることで空文字かどうかを真理値で返してくれる機能が標準で備わっています。

これは始めてみたとしても命名からなんとなく、空だったらtrueとなるのが雰囲気で伝わってきます。
このように、命名だけ見れば、中身を見なくてもなんとなくどういう意味か伝わってくる名前の付け方をするのは、コードを読みやすくする上で大切です。

加えて、名前を否定形にするのもあまり良くないです。
例えば、


let disableSsl: Bool = false

このようにするのではなく、肯定形にしたほうが、声に出して読みやすいのと短くてすみます。


let useSsl: Bool = true

ド・モルガンの法則を使う

高校数学の集合の単元でド・モルガンの法則を習ったのを覚えていますでしょうか?
このド・モルガンの法則は真理値でも使うことができます。

まずはド・モルガンの法則をおさらいしましょう。


not (a or b or c) ⇔ (not a) and (not b) and (not c)
not (a and b and c) ⇔ (not a) or (not b) or (not c)

全体にかかるnotをはがしてそれぞれに分配して、andorを反転させたとしても同じ結果になります。

これを利用して、複雑な論理式になってしまったとしても、簡単に書き直せる場合があります。


let a: Bool = false
let b: Bool = true

!(a && !b) //true
//以下に書き直せる
!a || b //true

リーダブルコード

より読みやすいコードにするための2つのTipsを紹介しました。
この2つの内容はいずれもこちらの「リーダブルコード」という本から内容を引用させていただきました。

リーダブルコードでは、より読みやすいコードを書くための実践的なテクニックがまとまった、エンジニアなら絶対に読むべき良書です。
僕も3回読みました。

まとめ

今回は、Bool型に関してまとめていきました。
Bool型は基本的な型の中でもよく使う型であるので、しっかり基本を押さえておきましょう。

Swiftの入門記事に関してはこちらにまとめていますので参考にしてみてください。

〜初心者でもわかるswift入門〜基本文法からiOSアプリを開発するまでこのシリーズではプログラミング初心者の人や、swiftを初めて触れる人、やってみたもののよくわからないという人向けに、swiftの基本文法から実際に動くiOSアプリをXcodeで開発するところまでを解説します。...