天天看点

《编写高质量代码:改善Objective-C程序的61个建议》——建议16:明智而审慎地使用BOOL类型

本节书摘来自华章出版社《编写高质量代码:改善objective-c程序的61个建议》一 书中的第2章,作者:刘一道,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

整型转换为bool 型时,要小心,不要直接和yes作比较。

bool 在objective-c里被定义为unsigned char,这意味着它不仅仅只有yes(1)和no(0)两个值。不要直接把整型强制转换为bool 型。常见的错误发生在把数组大小、指针的值或者逻辑位运算的结果赋值到bool型中,而这样就导致bool 值仅取决于之前整型值的最后一个字节,有可能出现整型值不为0但被转为no的情况。因此把整型转为bool型的时候请使用三元(ternery)操作符,保证返回yes 或no 值。

在bool、_bool 及bool(见c++ std 4.7.4、4.12及c99 std 6.3.1.2)之间可以安全地交换值或转型。但bool 和boolean 之间不可以,所以对待boolean 就像上面讲的整型一样就可以了。在objective-c函数签名里仅使用bool 。

对bool值使用逻辑运算(&&, ||, !)都是有效的,返回值也可以安全地转为bool型而不需要三元(ternery)操作符。

还有,不要把bool 型变量直接与yes 比较。这样不仅对于精通c的人很有难度,而且此条款的第一点也说明了这样做未必能得到你想要的结果。

 要点

(1)整型转为bool型,使用三元(ternery)操作符,以保证返回yes 或no 值。

(2)整型转换为bool型的时候要避免直接和yes做比较。

(3)bool值进行逻辑运算(&&, ||, ! )不但有效,而且还可以确保返回值安全地转为bool型,无须三元(ternery)操作符。