禅与 Objective-C 编程艺术 - 笔记
转发整理一些我认为值得学习的小节。
-原文 https://github.com/objc-zen/objc-zen-book
-Gitbook 链接(包含 PDF, mobi, epub 格式): http://yourtion.gitbooks.io/objc-zen-book-cn/ (感谢 yourtion 整理 )
nil 和 BOOL 检查
类似于 Yoda 表达式,nil 检查的方式也是存在争议的。一些 notous 库像这样检查对象是否为 nil:
1 | if (nil == myValue) { ... |
或许有人会提出这是错的,因为在 nil 作为一个常量的情况下,这样做就像 Yoda 表达式了。 但是一些程序员这么做的原因是为了避免调试的困难,看下面的代码:
1 | if (myValue == nil) { ... |
如果程序员敲错成这样:
1 | if (myValue = nil) { ... |
这是合法的语句,但是即使你是一个丰富经验的程序员,即使盯着眼睛瞧上好多遍也很难调试出错误。但是如果把 nil 放在左边,因为它不能被赋值,所以就不会发生这样的错误。 如果程序员这样做,他/她就可以轻松检查出可能的原因,比一遍遍检查敲下的代码要好很多。
为了避免这些奇怪的问题,可以用感叹号来作为运算符。因为 nil 是 解释到 NO,所以没必要在条件语句里面把它和其他值比较。同时,不要直接把它和 YES
比较,因为 YES
的定义是 1, 而 BOOL
是 8 bit的,实际上是 char 类型。
推荐:
1 | if (someObject) { ... |
不推荐:
1 | if (someObject == YES) { ... // Wrong |
同时这样也能提高一致性,以及提升可读性。