この記事は何?
Swift Language GuideのBasic Operatorsについて調べたので、備忘録を残します。
Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
Swiftプログラミングを基礎から動画で学びたい方には、Udemyコース「今日からはじめるプログラミング」をお勧めします。
Combining Logical Operators
いくつかの論理演算子を組み合わせて、より長い論理式を作成できます。
let enteredDoorCode = true // コードを正しく入力した
let passedRetinaScan = false // 網膜スキャンは不合格
let hasDoorKey = false // 鍵を持っていない
let knowsOverridePassword = true // 上書きパスワードを知っている
// コード入力と網膜スキャンを合格したか、鍵を持ってるか、上書きパスワードを知っている場合、入室を許可
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
&&
演算子||
演算子は依然として2つの値でのみ動作します。
そのため、これは実際には3つの小さな式が連鎖した単一の式です。
この例は次のように読むことができます。
コード入力と網膜スキャンを合格したか、有効なキーがあるか、上書きパスワードを知っている場合は、入室を許可する
enteredDoorCode
、passedRetinaScan
、hasDoorKey
の値に基づくと、最初の2つの条件式(enteredDoorCode && passedRetinaScan
とpassedRetinaScan || hasDoorKey
)はいずれもfalse
です。
ただし、上書きパスワードを知っているので、式全体(false || knowsOverridePassword
)はtrue
と評価されます。
メモ
Swiftの&&
演算子と||
演算子は、左結合です。
つまり、いくつかの論理演算子を評価する式では、左端の部分から評価されます。
Explicit Parentheses
複雑な論理式は意図が汲み取りにくくなりがちです。
厳密には不要な括弧()
を使って、意図を明確できる場合があります。
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
括弧()
のおかげで、「論理式全体において、enteredDoorCode
とpassedRetinaScan
だけは別個の条件として評価される」ことが明確になっています。
以前よりも全体的な意図は明確ですが、出力結果に影響はありません。
常に、簡潔さよりも読みやすさに配慮してください。