我正在研究别人的代码库,有几行是这样的:
if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
检查后将其设置为正确有什么意义吗?YES
我在这里缺少什么吗?
我正在研究别人的代码库,有几行是这样的:
if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
检查后将其设置为正确有什么意义吗?YES
我在这里缺少什么吗?
if (self.aBooleanProperty) {
self.aBooleanProperty = YES;
// Do some stuff
}
在正确编写的代码中,您不会遗漏任何内容,并且该 setter 行将可计费的代码行增加了 1 个,并且没有操作。
但是,有两个原因可能会出于误导的原因而这样做。
正如@HotLicks 所说,可能需要触发设置器的副作用。但是它们应该在设置时触发,除非开发人员有错误的想法,即直接在任何地方设置 ivar,然后使用上述方法将设置成本合并到一个位置。但这将是一件非常脆弱和愚蠢的事情。
另一个原因是,传统上,Objective-C 的 BOOL 是一种美化的char
. 只是它没有那么荣耀。因此,将 BOOL 与YES
比较实际上是危险的,因为YES
它具有显式值。
BOOL mmmmmK = 2; // this is valid
if (mmmmmK == YES) { /* this won't execute */ }
有点像在攀爬悬崖时,有东西开始下落,你不会大喊“瓶子”、“鞋子”、“卵石”或“假肢”,但你总是大喊ROCK。
所以,也许开发人员正在考虑用明确的“是”来规范化肯定。同样,非常值得怀疑,即使是这样,也应该引起人们对代码库其余部分质量的怀疑。
哎哟。
如果没有更多代码,这很难说。我想每个人都会同意代码似乎是错误的,但是,我们看到的是一个 obj-c 属性 - 以前的程序员可以做一些“聪明”的事情,例如当你调用它时,getter 可能会aBooleanProperty
设置自己NO
.
在修改代码之前,请检查 getter。这让我想起了schrödinbug
我认为这个人写错了 YES,而不是应该写 NO,因为它在检查条件时已经是 YES。否则,那条线没有任何意义。
如果
self.aBooleanProperty = YES;
包含在大括号中,不需要它,如果它是
self.aBooleanProperty = NO;
包含在内,那么它是合乎逻辑的