0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Swift】論理演算子の連結

Posted at

この記事は何?

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つの小さな式が連鎖した単一の式です。
この例は次のように読むことができます。

コード入力と網膜スキャンを合格したか、有効なキーがあるか、上書きパスワードを知っている場合は、入室を許可する

enteredDoorCodepassedRetinaScanhasDoorKeyの値に基づくと、最初の2つの条件式(enteredDoorCode && passedRetinaScanpassedRetinaScan || hasDoorKey)はいずれもfalseです。
ただし、上書きパスワードを知っているので、式全体(false || knowsOverridePassword )はtrueと評価されます。

メモ
Swiftの&&演算子と||演算子は、左結合です。
つまり、いくつかの論理演算子を評価する式では、左端の部分から評価されます。

Explicit Parentheses

複雑な論理式は意図が汲み取りにくくなりがちです。
厳密には不要な括弧()を使って、意図を明確できる場合があります。

if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "Welcome!"

括弧()のおかげで、「論理式全体において、enteredDoorCodepassedRetinaScanだけは別個の条件として評価される」ことが明確になっています。
以前よりも全体的な意図は明確ですが、出力結果に影響はありません。
常に、簡潔さよりも読みやすさに配慮してください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?