この記事ではSwift
の基本的な型である、Bool型
についての基本事項を解説していきます。
プログラミングが初心者も、他の言語をやっていてSwift
は初心者という人にもわかるように説明していきたいと思います。
サンプルコードも交えながら説明していきますので、Playground
を使って実際に手を動かしながら行えると効率よく学習できるかなと思います。
Contents
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型
はtrue
かfalse
のいずれかの値なので、名前を選ぶ際には意味を明確にしたほうがいいです。
例えば、以下は良くない例です。
let readPassword: Bool = true
read
をどう読むかを考えた場合に、2つの解釈の仕方があります。
- パスワードをこれから読み取る必要がある
- パスワードをすでに読み取っている
このように2つの解釈の仕方によって、全く逆の意味になってしまいます。なのでここではread
を使わないほうがいいです。
代わりにneedPassword
やuserIsAuthenticated
を使ったほうがよいです。
このようにBool型
では変数・定数名にis
・has
・can
・should
などをつけてわかりやすくすることが多いです。
例えば、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
をはがしてそれぞれに分配して、and
とor
を反転させたとしても同じ結果になります。
これを利用して、複雑な論理式になってしまったとしても、簡単に書き直せる場合があります。
let a: Bool = false
let b: Bool = true
!(a && !b) //true
//以下に書き直せる
!a || b //true
リーダブルコード
より読みやすいコードにするための2つのTipsを紹介しました。
この2つの内容はいずれもこちらの「リーダブルコード」という本から内容を引用させていただきました。
リーダブルコードでは、より読みやすいコードを書くための実践的なテクニックがまとまった、エンジニアなら絶対に読むべき良書です。
僕も3回読みました。
まとめ
今回は、Bool型
に関してまとめていきました。
Bool型
は基本的な型の中でもよく使う型であるので、しっかり基本を押さえておきましょう。
Swift
の入門記事に関してはこちらにまとめていますので参考にしてみてください。