美文网首页
Swift 基本运算符之逻辑

Swift 基本运算符之逻辑

作者: Swift社区 | 来源:发表于2022-08-17 11:19 被阅读0次

    逻辑运算的操作对象是逻辑布尔值。Swift 支持基于 C 语言的三个标准逻辑运算。

    逻辑非 !a
    逻辑与 a&&b
    逻辑或 a||b

    一:逻辑非

    逻辑非运算 !a 对一个布尔值取反,使得 true 变 false,false 变 true。

    它是一个前置运算符,需出现在操作数之前,且不加空格。读作 非 a,然后我们看以下例子:

    let allowedEntry = false
    if !allowedEntry {
        print("ACCESS DENIED")
    }
    // print "ACCESS DENIED"
    

    if !allowedEntry 语句可以读作 "如果 非 alowed entry.",接下一行代码只有在如果 "非allow entry" 为 true,即 allowEntry 为 false 时被执行。

    在示例代码中,小心地选择布尔常量或变量有助于代码的可读性,并且避免使用双重逻辑非运算,或混乱的逻辑语句。

    二:逻辑与

    逻辑与 a && b 表达了只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true。

    只要任意一个值为 false,整个表达式的值就为 false。事实上,如果第一个值为 false,那 么是不去计算第二个值的,因为它已经不可能影响整个表达式的结果了。这被称做 "短路计算"。

    以下例子,只有两个值都为值的时候才允许进入:

    // 逻辑与
    let enteredDoorCode = true
    let passedRetinaScan = false
    if enteredDoorCode && passedRetinaScan {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // 输出 "ACCESS DENIED"
    

    三:逻辑或

    逻辑或 a || b 是一个由两个连续的 | 组成的中置运算符。它表示了两个逻辑表达式的其中 一个为 true,整个表达式就为 true。

    同逻辑与运算类似,逻辑或也是"短路计算"的,当左端的表达式为 true 时,将不计算右边的表达式了,因为它不可能改变整个表达式的值了。

    以下示例代码中,第一个布尔值 hasDoorKey 为 false,但第二个值 knowsOverridePassword 为 true,所以整个表达是 true,于是允许进入:

    // 逻辑或
    let hasDoorKey = false
    let konwsOverridePassword = true
    if hasDoorKey || konwsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // 输出 "Welcome!"
    

    四:组合逻辑

    我们可以组合多个逻辑运算来表达一个复合逻辑:

    if enteredDoorCode && passedRetinaScan || hasDoorKey || konwsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // 输出 "Welcome!"
    

    这个例子使用了含多个 && 和 || 的复合逻辑。但无论怎样,&& 和 || 始终只能操作两个值。所以这实际是三个简单逻辑连续操作的结果。我们来解读一下:

    如果我们输入了正确的密码并通过了 视网膜扫描, 或者我们有一把有效的钥匙,又或者我们知道紧急情况下重置的密码,我们就能把门打开进入。

    前两种情况,我们都不满足,所以前两个简单逻辑的结果是 false,但是我们是知道紧急情况下重置的密码的,所以整个复杂表达式的值还是 true。

    五:使用括号来明确优先级

    为了一个复杂表达式更容易读懂,在合适的地方使用括号来明确 优先 级是很 有效 的,虽然 它并非必要的。在上个关于门的权限的例子中,我们给第一个部分加个括号,使用它看起来逻辑更明确。

    if (enteredDoorCode && passedRetinaScan) || hasDoorKey || konwsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // 输出 "Welcome!"
    

    这括号使得前两个值被看成整个逻辑表达中独立 的一个部分。虽然有括号和没括号的输出结果是一样的,但对于读代码的人来说有括号的代码更清晰。

    可读性比简洁性更重要,请在可以让你代码变清晰地地方加个括号吧!

    相关文章

      网友评论

          本文标题:Swift 基本运算符之逻辑

          本文链接:https://www.haomeiwen.com/subject/xwooactx.html