非逻辑运算符
Not logical operator
我需要帮助来理解以下代码。
为什么即使 !test 等于 true 也会打印“yes”。
谢谢
var test: Bool = false
if !test {
print("yes")
}
if !test == true {
print("oky")
}
print(!test)
Console:
yes
oky
true
测试等于假,如第一行中所定义。
非运算符 (!) returns 如果语句为假则为真,如果语句为真则为假。
由于 test 等于 false,!test 等于 true。
if (!test) 和 if (!test == true) 两个条件都满足,因为 !test 为真,所以打印文本。
因为如果if
之后的条件为真,命令就会被执行。
这些行是等价的:
if !test {
if !test == true {
我认为您可能将 test
的值与 !test
的值混淆了。 Not 运算符否定它所作用的任何值,在本例中为变量 test
.
- “测试”变量定义为默认值 'false'。
- “if !test”等于“if !test == true”,在这两种情况下,您的测试都被否定,这意味着 'false' 变为 'true',这就是执行打印的原因。
我想补充一点,有些开发人员很难阅读负逻辑。以下是此类逻辑表达式的一些示例。
需要时间处理的逻辑示例::
- view.isHidden = !isLoading
- view.isHidden = !hasData
- view.isHidden = !canAdd
- view.idHidden = !(data?.isEmpty ?? true)
- view.isHidden = !hasChanges
可能的解决方案是:
- 在视图上创建“isVisible”
- 使用if-else
有一篇威胁到主题的好文章in-depth:
Don’t ever not avoid negative logic
If you want to be nice to people with a challenged relationship with
boolean logic, try to avoid negative formulations and negations.
我需要帮助来理解以下代码。 为什么即使 !test 等于 true 也会打印“yes”。 谢谢
var test: Bool = false
if !test {
print("yes")
}
if !test == true {
print("oky")
}
print(!test)
Console:
yes
oky
true
测试等于假,如第一行中所定义。
非运算符 (!) returns 如果语句为假则为真,如果语句为真则为假。
由于 test 等于 false,!test 等于 true。
if (!test) 和 if (!test == true) 两个条件都满足,因为 !test 为真,所以打印文本。
因为如果if
之后的条件为真,命令就会被执行。
这些行是等价的:
if !test {
if !test == true {
我认为您可能将 test
的值与 !test
的值混淆了。 Not 运算符否定它所作用的任何值,在本例中为变量 test
.
- “测试”变量定义为默认值 'false'。
- “if !test”等于“if !test == true”,在这两种情况下,您的测试都被否定,这意味着 'false' 变为 'true',这就是执行打印的原因。
我想补充一点,有些开发人员很难阅读负逻辑。以下是此类逻辑表达式的一些示例。
需要时间处理的逻辑示例::
- view.isHidden = !isLoading
- view.isHidden = !hasData
- view.isHidden = !canAdd
- view.idHidden = !(data?.isEmpty ?? true)
- view.isHidden = !hasChanges
可能的解决方案是:
- 在视图上创建“isVisible”
- 使用if-else
有一篇威胁到主题的好文章in-depth:
Don’t ever not avoid negative logic
If you want to be nice to people with a challenged relationship with boolean logic, try to avoid negative formulations and negations.