总结-OC禅与艺术

条件语句

推荐写法,加上括号
if (!error) {
    return success;
}

不推荐写法
if (!error)
    return success;

表达式

推荐写法
if ([myValue isEqual:@42]) { ...

不推荐写法
if ([@42 isEqual:myValue]) { ...

nil和bool检查

推荐写法
if (someObject) { ...
if (![someObject boolValue]) { ...
if (!someObject) { ...

不推荐写法
if (someObject == YES) { ... // Wrong
if (myRawValue == YES) { ... // Never do this.
if ([someObject boolValue] == NO) { ...

方法中重要的部分不要嵌套在分支里面

推荐写法
如果条件不满足,就退出,如果条件满足,就继续执行方法内的代码,这些代码没有在条件分支里面,而是在条件分支外面
- (void)someMethod {
  if (![someOther boolValue]) {
      return;
  }

  //Do something important
}

不推荐写法
下面的写法我经常使用,就是判断某条件满足,然后执行条件中的代码,应该好的做法是像上面一样
- (void)someMethod {
  if ([someOther boolValue]) {
    //Do something important
  }
}

复杂表达式

推荐做法
当你有一个复杂的 if 子句的时候,你应该把它们提取出来赋给一个 BOOL 变量,这样可以让逻辑更清楚,而且让每个子句的意义体现出来。
BOOL nameContainsSwift  = [sessionName containsString:@"Swift"];
BOOL isCurrentYear      = [sessionDateCompontents year] == 2014;
BOOL isSwiftSession    = nameContainsSwift && isCurrentYear;

if (isSwiftSession) {
    // Do something very cool
}

三元运算符
推荐写法
result = a > b ? x : y;

不推荐写法
一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解
result = a > b ? x = c > d ? c : d : y;

情况2:当三元运算符的第二个参数(if 分支)返回和条件语句中已经检查的对象一样的对象的时候
推荐写法
result = object ? : [self createObject];// 就是后面不写多一次object

不推荐写法
result = object ? object : [self createObject];

错误处理
推荐写法
有些方法通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。
NSError *error = nil;
if (![self trySomethingWithError:&error]) {
    // Handle Error
}

Case语句

- 除非编译器强制要求,括号在 case 语句里面是不必要的。但是当一个 case 包含了多行语句的时候,需要加上括号。
- 使用 fall-through 在不同的 case 里面执行同一段代码。一个 fall-through 是指移除 case 语句的 “break” 然后让下面的 case 继续执行。
- 当在 switch 语句里面使用一个可枚举的变量的时候,default 是不必要的
- 当使用 enum 的时候,建议使用新的固定的基础类型定义,因为它有更强大的类型检查和代码补全。 SDK 现在有一个 宏来鼓励和促进使用固定类型定义 - NS_ENUM()
- 为了避免使用默认的 case,如果新的值加入到 enum,程序员会马上收到一个 warning 通知

// 一个case有多行语句,加上括号
switch (condition) {
    case 1:
        // ...
        break;
    case 2: {
        // ...
        // Multi-line example using braces
        break;
      }
    case 3:
        // ...
        break;
    default:
        // ...
        break;
}

// fall-through,就是执行case1继续执行下面的case,不停止
switch (condition) {
    case 1:
    case 2:
        // code executed for values 1 and 2
        break;
    default:
        // ...
        break;
}

// 不使用default
switch (menuType) {
    case ZOCEnumNone:
        // ...
        break;
    case ZOCEnumValue1:
        // ...
        break;
    case ZOCEnumValue2:
        // ...
        break;
}

// warning通知
Enumeration value ‘ZOCEnumValue3‘ not handled in switch.(枚举类型 ‘ZOCEnumValue3‘ 没有被 switch 处理)

// 使用NS_ENUM()
typedef NS_ENUM(NSUInteger, ZOCMachineState) {
    ZOCMachineStateNone,
    ZOCMachineStateIdle,
    ZOCMachineStateRunning,
    ZOCMachineStatePaused
};

  

时间: 2024-08-26 02:43:05

总结-OC禅与艺术的相关文章

编程人生读书笔记(4):Bredan Eich

Bredan Eich是JavaScript设计者,Mozilla首席技术官,ECMAScript标准的制定者.Breda有着坚实的理论基础和较强的工程实践能力,本科物理专业,数学底子很好.在学校里主要做科研编程,毕业后从事网络.系统内核开发.专长是编译器,内核开发,设计了JavaScript语言. 0.总结从语言设计者的角度看待编程.学习和实践的关系:- 编程要实践,选择合适的工具(语言),有自己的态度(动力)坚持练习.- 设计代码的方法:用伪代码理清思路,再着手底层实践.实践多了,最后总结成

禅与摩托车维修艺术

[作者简介]: 罗伯特·M·波西格(Robert M. Pirsig),1928年生于美国明尼苏达州双子城.15岁进入明尼苏达大学主修化学,后又学习哲学,之后在该校攻读传播学硕士:他曾到印度伯纳雷斯印度大学学习东方哲学,并担任修辞学教授.在追求真理的过程中,因为西方倡导的二元对立与二分法带来的分裂而困扰不已,因而一直试图寻找支离破碎的文化的整合之道,并试图建立自己“metaphysics of quality”的理论架构.不停地思考这些问题使他长期饱受折磨和束缚.1961年他被诊断为偏执型精神分

与技术无关,但却值得码农们好好读一读的怪书:禅与摩托车维修艺术

最近在读<禅与摩托车维修艺术>这本书,说它很奇怪,其实是因为觉得书名很有意思.看书名,很容易被误解成是一本教人修摩托车的教程,事实上它是一本非常经典的哲学书籍,很多大牛都有推介过这本书. 著名的物理学家 霍金 曾这样评价这本书: “我因为写了一部人们把它和<禅与摩托车维修艺术>相比较的书而感到甚受恭维,我希望拙作(<时间简史>)和<禅与摩托车维修艺术>一样使人们觉得他们不必自处于伟大的智慧及哲学的问题之外” 其实不单单是霍金,乔布斯也曾经极力的推崇过这本书.

B17-禅与 Objective-C 编程艺术的阅读笔记

以下仅为个人阅读笔记,记录翻阅之用.原文地址:https://github.com/oa414/objc-zen-book-cn 感谢! 一.单例问题 参照前面单例的滥用一文. http://www.cnblogs.com/yaann/p/4661909.html 二.类簇 三.属性 四.断言 条件成立就抛出异常. 五.相等性 六.Categories 八.Pragma的使用 九.Block 十.self的循环引用 十一.多重委托

《禅与Objective-C编程艺术》读书笔记(二)

五.Categories 我们应该要在我们的 category 方法前加上自己的小写前缀以及下划线,比如- (id)zoc_myCategoryMethod. 这种实践同样被苹果推荐.这是非常必要的.因为如果在扩展的 category 或者其他 category 里面已经使用了同样的方法名,会导致不可预计的后果.实际上,实际被调用的是最后被实现的那个方法.如果想要确认你的分类方法没有覆盖其他实现的话,可以把环境变量 OBJC_PRINT_REPLACED_METHODS 设置为 YES,这样那些

禅与摩托车修理艺术...(正统的科学方法)

…… …… …… "在这里要提到逻辑的两种方法,归纳法和演绎法.归纳法是从观察摩托车开始,然后得到普遍性的结论.比如说,如果摩托车在路上碰到坑洞,发动机就熄火了:然后又碰到了一次,发动机又熄了:然后再碰到一次,发动机仍然熄了:之后,行在平坦的路上,就没有熄火的情形,然后再碰到一次,发动机又熄火了.那么这个人就可以合理地推断,发动机熄火是坑洞造成的,这就是所谓的归纳法,由个别的经验归纳出普遍的原则.演绎法正好相反,它是从一般的原则推论出特定的结果.比如说,我们知道摩托车有一定的结构.体系,修理人员

禅与摩托车修理艺术...(假设.验证.真理.科学)

…… …… …… “在科学的殿堂里有许多深宅大院……有各种人住在其中,而他们住在这儿的动机也是形形色色,五花八门.有些人倾心于科学是因为有优越的智力,科学成了他们独有的活动,在其中他们得到了生动的经验,也满足了他们的野心.有一些人则完全是为了实用的目的,而将自己思考的产物献在祭坛上.如果上帝派来的天使将上面两种人从殿里驱逐出去,那么殿里很显然会空旷许多,但是里面仍然会住着一批古今人物……如果殿里只住着前述两种人,那么它就只不过是一座空木屋,只有四处攀爬的蔓草……那些获得天使青睐的人……有些古怪.

缠中说禅:教你炒股票108课(转载)

股市闲谈:G股是G点,大牛不用套!(2006-05-12 19:02:25) 能和本ID聊股市的,如果有,最多就处在精子或卵子状态,连受精卵都算不上.而且股市游戏是靠干出来而不是说出来的,因此一般都不说.但看到有些人被这股市折腾得厉害,出于同情,又周末了,也就说两句.  一年前股市跌到1000点最腥风血雨时,当时看到很多人在网上很可怜,就用老ID给了一个明确的说法,叫"G股是G点",越腥风血雨就机会越大了.现在这个G点已经弄得让很多人受不了,绝大多数在市场中的人都是很犯贱的,跌也怕,涨

[No000028]Python的使用之禅及程序员应该明白的一些道理

最近疯狂的学习ruby和python着两门语言,看到书本上一些比较赞同的段子,摘抄并翻译如下: Python的使用之禅 Beautiful is better than ugly. 美丽好过丑陋Explicit is better than implicit. 明示好过暗示Simple is better than complex. 简单好过复杂Complex is better than complicated.复杂好过杂乱Flat is better than nested.平坦好过嵌套Sp