本文来自于疯子们的开源图书
逻辑操作符用于修改或者组合布尔逻辑值true和false。Swift支持C语言当中的三个标准逻辑操作符:
- 逻辑非(!a)
- 逻辑与(a&&b)
- 逻辑或(a||b)
逻辑非操作符
逻辑非操作符翻转一个布尔值,即将true变成false,false变成true.
逻辑非是一个前序操作符,后面紧跟着要操作的值,中间没有空白。可以读作"非a",就像下面的例子一样:
表达式if !allowedEntry可以读作“if not allowed entry”.只有当"not allowed entry'是true的时候,接下来的代码才会执行。即 allowedEntry 是false.
就像上面的例子一样,仔细的选择一下逻辑变量和常量的名字有助于代码的简洁和可读性,从而可以避免双重否定或者令人混淆的逻辑语句。
逻辑与操作符
由逻辑与操作符(a&&b)构成的逻辑表达式只有当两个值都是true的时候,整个表达式才是true
只要其中的一个为false的话,整个表达式就是false.事实上,如果第一个值为false,第二个值也不会计算的,因为整个表达式的值已经不可能为true了。这就是所谓的短路法则。
下面的例子会考虑两个Bool值的,只有当两个都为true的时候,才可以进门去:
逻辑或操作符
逻辑或(a||b)操作符是由两个竖杠构成的中序操作符。由逻辑或操作符构成的逻辑表达式只要有一个的值为true,整个表达式的值就为true.
就像上面的逻辑与操作符,逻辑或操作符也使用短路法则计算表达式的值。如果逻辑或操作符左侧的值为true,
那么右侧的值也不会计算了,因为已经不可能影响到整个表达式的结果了。
在下面的例子中,第一个布尔值(hasDoorKey)为false,但是第二个值(knowsOverridePassword)为true,由于有一个值为true,整个表达式的值也为true,可以进门了:
组合使用逻辑操作符
你可以组合使用多个逻辑操作符来构成一个更长的复合表达式:
这个例子中使用了多个&&和||操作符构成了一个更长的复合表达式。不过&&,||仍然是二元操作符,因此实际上这个表达式就是由三个更小的表达式构成的而已。可以读作:
如果我们输入了正确的进入码,并且通过了视网膜扫描;或者我们有能开门的钥匙;或者我们知道紧急通行密码,那么我们都可以进门。
根据的值,虽然前两个子表达式的值都为为false.不过紧急通行密码是已知的,整个表达式的值就是true.
括号
虽然有些地方没有强制使用括号,但是有时候使用一下括号还是很有用的,它可以使得一个复杂表达式的含义更容易阅读。还是上面进门的例子,在复合表达式的第一部分上添加括号可以使得他的含义更加的清晰:
在前两个值上添加括号可以使得他们作为一个整体的来看待。整个表达式的值没有变,但是真个表达式的含义更易于阅读了。可读性永远比简洁性更重要。尽量适当的使用一下括号,表达式的含义会更加的清晰。