Web 技术研究所

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

到底什么才算黑魔法?

  经常听到「xxx 东西的实现用了很多黑魔法」之类的话,但到底什么才算黑魔法呢?这应该是一个比较主观的感觉吧?有些东西确实是公认的黑魔法,比如「最短的 IE8 检测代码」、eval 等,但有些可能就会被认为是正常程序,比如访问器属性、arguments 等。
  其实 eval 和 arguments 都是语言(JavaScript)自己提供的东西,为什么前者就是黑魔法,后者就不是呢?它们的差异大概在这里吧?eval 是依赖 JavaScript 动态解析这个特性的,它依赖了语言的特性;而 arguments 属于糖,是古老的 argc argv 的一种表现,任何语言都可以实现。于是我试着从这个差异中总结出黑魔法的一个条:依赖语言或平台特性的东西属于黑魔法
  这句话看似好像没什么问题,但有趣的是 JavaScript 的原型继承也是一种特有的东西。换到其它编程语言的角度看,这可能需要通过反射来实现。但有谁觉得 JavaScript 的原型继承是黑魔法呢?也许刚从其它编程语言转到 JavaScript 的人会觉得是,我想大部分了解 JavaScript 的人都不会认为原型继承这东西有什么黑魔法在里面。所以上面那句淡淡的总结确实有点问题。
  其实不依赖语言特性,就只用最基本的图灵完备语法也可以解决任何问题。但如果是这样我们还学些各种编程语言干嘛?有时候看到一些代码用大堆 if、for 来解决问题,不得不承认代码逻辑没问题,也毫无黑魔法。但既然有语言内置的各种函数为什么不用呢,写那么多代码不累吗?这大概有两种原因吧?一种是写这个代码的人是刚从别的语言转过来的,不知道有内置函数可以用;另一种是顾虑内置函数的性能或未来兼容性而弃用。
  有人告诉我说用 if、for 这样干净的代码写出来的程序更易读,内置的函数可能有人看不懂。我觉得,如果把看不懂代码的人都考虑上,首先如何确保别人能看懂 if、for?看不懂代码是个人的问题,应该自己提高,为什么要把代码降级到人人都能看懂的程度呢?if、for 这样的代码能看懂仅仅是停留在能看懂代码如何执行的而已,如果不懂算法,就算看懂代码如何执行的也完全不懂代码逻辑和原理又有何用?
  if、for 这样的东西是最纯粹的、没有黑魔法的。而其他任何东西都可能基于语言特性,可以在下一个版本就被删除的特性,都可能是黑魔法,只是它们黑的程度不同而已。我们不用 eval 是因为它太容易让程序出错,而且出错还不容易 Debug 出来。并没有一本标准的「黑魔法大全」来告诉我们那些东西属于黑魔法。甚至每个项目可以使用的特性都不同,这完全是属于代码规范的问题。
  所以我不想纠结一个框架用的魔法有多黑,即便里面全是 eval、即便使用 VBS 来兼容 IE,只要不影响使用我都可以接受。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^