美文网首页
[4](1)学习《禅与 Objective-C 编程艺术》

[4](1)学习《禅与 Objective-C 编程艺术》

作者: 默然走一生 | 来源:发表于2019-04-26 09:31 被阅读0次

    《禅与 Objective-C 编程艺术》 GitBook

    Zen and the Art of the Objective-C Craftsmanship 中文翻译

    条件语句

    条件语句体应该总是被大括号包围。尽管有时候你可以不使用大括号(比如,条件语句体只有一行内容),但是这样做会带来问题隐患。比如,增加一行代码时,你可能会误以为它是 if 语句体里面的。此外,更危险的是,如果把 if 后面的那行代码注释掉,之后的一行代码会成为 if 语句里的代码。

    推荐:

    if (!error) {
        return success;
    }
    

    不推荐

    if (!error)
        return success;
    

    if (!error) return success;
    
    

    尤达表达式

    不要使用尤达表达式。尤达表达式是指,拿一个常量去和变量比较而不是拿变量去和常量比较。它就像是在表达 “蓝色是不是天空的颜色” 或者 “高个是不是这个男人的属性” 而不是 “天空是不是蓝的” 或者 “这个男人是不是高个子的”

    yoda.png

    (译者注:名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序)

    推荐:

    if ([myValue isEqual:@42]) { ...
    
    

    不推荐:

    if ([@42 isEqual:myValue]) { ...
    

    nil 和 BOOL 检查

    类似于 Yoda 表达式,nil 检查的方式也是存在争议的。一些 notous 库像这样检查对象是否为 nil:

    if (nil == myValue) { ...
    

    或许有人会提出这是错的,因为在 nil 作为一个常量的情况下,这样做就像 Yoda 表达式了。 但是一些程序员这么做的原因是为了避免调试的困难,看下面的代码:

    if (myValue == nil) { ...
    

    如果程序员敲错成这样:

    if (myValue = nil) { ...
    

    这是合法的语句,但是即使你是一个丰富经验的程序员,即使盯着眼睛瞧上好多遍也很难调试出错误。但是如果把 nil 放在左边,因为它不能被赋值,所以就不会发生这样的错误。 如果程序员这样做,他/她就可以轻松检查出可能的原因,比一遍遍检查敲下的代码要好很多。

    为了避免这些奇怪的问题,可以用感叹号来作为运算符。因为 nil 是 解释到 NO,所以没必要在条件语句里面把它和其他值比较。同时,不要直接把它和 YES 比较,因为 YES 的定义是 1, 而 BOOL 是 8 bit的,实际上是 char 类型。

    推荐:

    if (someObject) { ...
    if (![someObject boolValue]) { ...
    if (!someObject) { ...
    if (myValue = nil) { ...
    

    不推荐:

    if (someObject == YES) { ... // Wrong
    if (myRawValue == YES) { ... // Never do this.
    if ([someObject boolValue] == NO) { ...
    if (myValue = nil) { ...
    

    原文 https://github.com/objc-zen/objc-zen-book

    作者

    Luca Bernardi

    Alberto De Bortoli

    关于中文翻译

    译者

    林翔宇

    庞博

    Kevin.Xiao

    GitBook 排版

    Yourtion

    相关文章

      网友评论

          本文标题:[4](1)学习《禅与 Objective-C 编程艺术》

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