Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

代码的悲伤

  在团队开发过程中经常会遇到看不懂别人代码的情况。一些依赖于编程语言特性来写的代码可能会由于其他人对编程语言不够熟悉而无法理解。比如要判断一个变量是 null 或 undefined 时要怎么写呢?直接依赖 JavaScript 的「==」运算符呢还是另写一坨代码来判断呢?
  JavaScript 中「==」运算符的规则 是非常复杂的,大多数人根本记不住也不愿意去记。当我想判断一个变量是否为 null 或 undefined 时,我随手写了个这样的代码 if(x == null);   后来发现这个代码会有很多人看不懂。于是我又重新写了个 if(x === null || x === void 0);   再后来又觉得别人可能看不懂 void 0 是什么,于是又改成了 if(x === null || typeof x === 'undefined');   然后越看越蛋疼!于是换回第一种写法,并加以注释 // Note: match null or undefined.
if(x == null);
  上面这只是一个典型的例子,类似的事情还有好多好多。到底是哪里出了什么问题?是 JavaScript 这种编程语言太烂还是业界的水平太低?每当我们希望能写出大家都能看懂的代码时,代码中能用的特性就寥寥无几了。
  我以前一直提倡黑盒开发就是基于这样的顾虑。看代码不要一行行地看,而是一块块地看。每一块内部怎么实现的不要关心,只要知道每一块是干什么的。这可能有点依赖于注释和文档,但这确实是一种高效高可读性开发的解决方案。甚至每一块代码都可以做单元测试。别人写的一块代码出 Bug 时,如果能读懂就该内部的实现,读不懂就重新根据这一块的功能需求和接口描述重新写出这么一块。
  其实我觉得,现在 JavaScript 语言规范都被玩坏了。各种多如牛毛的细节定义有什么卵用么?谁记得住?谁又能保证这些边缘特性不在下一个版本被改掉呢?所以为什么要浪费时间去定义它?直接交给实现不好么?将这些奇葩特性冠以 UB 之名并放话说谁用谁傻逼就没人会再去用了。
  突然发现自己才是傻逼,居然会去读那些没有任何浏览器实现的规范。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^