layout: post title: D码点评:16 Yoda 表示法错在哪里 description: ~ 麻辣评点,善意满盈 author: zoomq categories: gDgcoDe tags: gdg D码点评 dd wechat coding


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码点评 的栏目,大妈选择代码样例也越发的困难起来;

总算找到这篇代码量很短,但是,信息量巨大的好文章,就立即分享了...

好吧,也不是立即了...

这里包含的信息量大在什么地方呢?

"...问题的根源其实不在于赋值操作的名字,而是有更深的原因..."

原因值得探索,但是,想探索这种表层现象的真正因由 这一意识, 才是平庸和伟大的根本差异哪!

当然的,有了意识,最后是否作到,则是思想家和实践者的本质差异了.



以上...


码不停提马上无虫 ;-)

|_|0|_|
|_|_|0|
|0|0|0|

加入 珠海GDG

  1. 注册 G+
  2. 关注 GDG Zhuhai
  3. 成为 GDG Zhuha开发者

通过 珠海GDG 可以:

    第一时间获知谷歌最新的技术,
    可以学到如何去谷歌平台上赚钱的思路和方法,
    可以认识很多有可能将来一起走上自己创业道路的人,
    可以学会把你的创新带向国际市场,
    参加那里的活动有经常和国际上的开发者们进行交流的机会...

PS:

若无意外,题图都是从原文提取或是通过 Google 图片搜索出来的, 版权属左, 不负责任 ;-)

PPS:

珠海GDG wechat/Blog 都是欢迎投稿的,只要追认内容吻合以下条件:

0. 有趣 ~ 至少是自个儿有兴趣的领域吧...
1. 有料 ~ 至少有点儿原创的东西吧..
2. 有种 ~ 至少不能是成功学吧!

有好物的,及时向大妈们吼: [email protected]

微信栏目

当前应该是:

    G术图书 (gb:推荐好书,书无中外)
    D码点评 (dd:麻辣评点,善意满盈)
    G说公论 (gt:时评杂文,新旧不拘)
    珠的自白(dm:大妈自述,每周一篇)
    海选文章(hd:得要相信,大妈法眼)

总之! 珠海的组委大妈们,决定开始坚持发文,方方面面细细同大家分享/交流

总之! 请大家告诉大家, 珠海生活中的技术社区 已经认真回归 微信,都来订阅吧!

订阅方法

GDG珠海 社区资源:


Author: Zoom.Quiet /mail / gittip / github