D码点评:16 Yoda 表示法错在哪里
Yoda 表示法错在哪里 在上一篇 博文 里,我提到了 Yoda 表示法.
它的含义是,在 C/C++ 里面使用这样的表达式顺序:
if ("blue" == theSky) ...
这是为了避免意外的写成:
if (theSky = "blue") ...
“Yoda 表示法”的名字来源于«星球大战»的 Yoda 大师. 他说话的单词顺序相当奇特,比如:”Backwards it is, yes!”
一般认为
使用这个表示法是为了"变通"(workaround) C/C++ 的一个设计抉择:
使用 = 来表示赋值,而使用 == 来表示比较.
这个设计充分的展现了"先辈的罪"(Sins of our Forefathers)
这一词汇的精髓.
我认为
使用 = 来表示赋值其实并不是真正的错误所在.
真正的错误在于 C/C++ 的赋值语句不应该返回一个值.
也就是说,theSky = “blue” 的所有功能应该只是”赋值”这种”副作用”,副作用不应该具有”值”. 即使你牵强附会说它有一个值,它的”值”也应该是 void(随之这个 void 会被类型检查所拒绝,因为它不是 if 所期望的 bool). 所以,一个良好的语言不应该允许你把 theSky = “blue” 放进 if (…) 的”条件”里面. 如果你真的要赋值又要判断,它会迫使你把这拆开成两行:
theSky = "blue";
if (theSky) ...
更近一步. if (theSky) 这个写法其实也是一个先辈的罪. theSky 的类型是 string,它不应该可以直接被作为 bool 使用. if (…) 的条件应该必须是一个 bool. 所以这里其实应该写成:
theSky = "blue";
if (theSky != NULL) ...
因为赋值语句永远不可能出现在条件的位置,所以之前的那种错误,即使我们使用 = 作为赋值操作符,也完全不可能出现. 这样我们也就完全没必要用 Yoda 表示法了.
相反,如果我们只是把 = 换成像 Pascal 的 := 这样的赋值操作符,而保留其它的”特性”(赋值操作会返回值)的话,我们其实还是会遇到同样的问题:
if (theSky := "blue") ...
这里假设你想打 = , 却不小心打成了 := . 机会虽然小,但是仍然有可能. 而我推荐的解决方案,会让你故意想犯错误都不可能,编译器会拒绝接受你的程序.
所以你看到了,问题的根源其实不在于赋值操作的名字,而是有更深的原因.
是也乎
文章原作者是: yinwang
,可能不熟悉这个 ID;
那么 王珢
应该都听说吧!
那个主动放弃了三个博士学位,公开 BS Google 的技术素质的猛人!
现在米国,作着自个儿想作的事儿,将自个儿一个开源静态代码分析工具,结合一个创业公司,在作这世界上最COOL 的事情之一: 自动分析所有人类代码!
根据以往 GDG 活动的反馈,多数在校同学,对分享的内容基本 不明觉厉
;
所以, D码点评
的栏目,大妈选择代码样例也越发的困难起来;
总算找到这篇代码量很短,但是,信息量巨大的好文章,就立即分享了…
好吧,也不是立即了…
这里包含的信息量大在什么地方呢?
“…问题的根源其实不在于赋值操作的名字,而是有更深的原因…”
原因值得探索,但是,想探索这种表层现象的真正因由 这一意识, 才是平庸和伟大的根本差异哪!
当然的,有了意识,最后是否作到,则是思想家和实践者的本质差异了.
巡阅
- 150113 Zoom.Quiet checked
声明: 本文采用 BY-NC-SA 授权。转载请注明转自: #ZHGDG#
以上...
加入 珠海GDG
- 注册 Meetup
- 关注 Zhuhai GDG
- 或扫描:
通过 珠海GDG 可以:
第一时间获知谷歌最新技术, 可以学到如何去谷歌平台上赚钱的思路和方法, 可以认识很多有可能将来一起走上自己创业道路的人, 可以学会把你的创新带向国际市场, 参加那里的活动有经常和国际上的开发者们进行交流的机会...
PS:
若无意外,题图都是从原文提取或是通过 Google 图片搜索出来的, 版权属左, 不负责任 ;-)
PPS:
珠海GDG 微信/Blog 欢迎投稿,只要追自认内容吻合以下条件:
0. 有趣 ~ 至少是自个儿有兴趣的领域吧... 1. 有料 ~ 至少有点儿原创的东西吧.. 2. 有种 ~ 至少不能是成功学吧!
有好物请及时通过邮件列表投稿成也:
[email protected]
(发空邮件到 [email protected] 即完成订阅)
微信公号
栏目设定:
G术图书 (gb:推荐好书,书无中外) D码点评 (dd:麻辣评点,善意满盈) G说公论 (gt:时评杂文,新旧不拘) 珠的自白(dm:大妈自述,每周一篇) 海选文章(hd:得要相信,大妈法眼)
总之, 请大家告诉大家, 珠海生活中的技术社区
都来订阅呗 ;-)
订阅方法
- 搜索微信号
GDG-ZhuHai
- 或查找公众号:
GDG珠海
- 或扫描:
GDG珠海 社区资源:
- 邮件列表: [email protected] (可发空邮件到 [email protected] 即完成订阅)
- 微信: GDG珠海
- 博客: 珠海GDG | GDG Livin ZhuHai Life;-)
大妈的多重宇宙 - YouTube
全新自媒体系列...科学幻想,读书,说故事...任何问题
随时邮件提问可也:[email protected]