前两天同事们在skype里讨论coffeescript,我本着娱乐精神随口蹦出了标题这么一句。
一切语法糖都是伪银弹。
说完觉得自己又冲动了,没有理由没有根据的随意下定论是扯淡,后来觉得不妥,本着有理有据才能立于不败之地的拧巴精神。还是单写一篇blog来阐述吧。
其实关于银弹,你很难看到这年头谁舔着脸好意思说自己发现了银弹,所以说,你可以大胆的say任何事物都不是银弹也不会招致针对性的批评,也都有反驳的余地。但如果敢说某一样东西是银弹的话,那么就等着被口水淹没吧。所以,我们不谈银弹了,就单说语法糖的好坏。对吧,没有东西是银弹,但每样存在的东西还是都有其优缺点好坏的。尽量的采纳吸取好的,淘汰坏的。那么即便在没有淫荡银弹的悲惨世界也能过的更好些,对吧。
语法糖顾名思义嘛,就是在语法上做文章,使程序员写code时候,觉得更加的甜蜜开心,跟吃了糖似的。但,到底这糖吃了只是变开心还是回头拉肚子,那就case by case了。所以就拿近期比较hot的几个语法糖来阐述我的立场吧。
haml,这个语法糖存在的蛮久的了,手头的项目也引进了许多年。但一直以来,我对这玩意儿就是不感冒,人html好好的标签式语言,让这东西用%啊神马的改的乱七八糟,面目全非的。我觉得如果我是一名和HTML打交道多年的UI前端工程师绝逼恨死这东西了,纯粹的语法变异而不是改进了。说这东西好的人群我观察了很久发现大部分还是偏后端的程序员,而理由基本上也只是简洁。而html原有的标签式语言只是这帮损色(跟我读:sai)不那么真的懂得html好处,惧怕精通一门和他们原有知识有很大区别语言的借口和污蔑。君不见xml为神马遍及程序世界的每个角落,除了滥用之外,确实在描述某些东西上,标签式语言是有它的长处和优点的。比方html这门xml方言,就是来描述web界面的,每个标签的开始与闭合都代表着UI上的每一篇区域,多么自然,多么美好啊。非要你丫用空格和%之类的好像很酷就一个字符很省地方的晦涩形式来替代,到底真的哪点好了呢亲,当你在firebug里面调试html dom结构的时候,发现问题,结果对应到code端是一堆奇怪haml代码,然后脑袋里人肉的转换又哪点好了呢亲?别说这是熟练度的问题,再熟练的大脑也只是大脑,多一层转换就要消耗多一层反应和注意,这一点都是无可避免的弱点。所以,分析到最后,结论就是这个东西除了能抵消一些后端程序员因为不精通html带来的惧怕感,让自己躲在自己固有知识的牢笼安乐死之外,没有任何真正的好处。小二,请下一位上场。
sass,这个东西是最近才热乎起来的。不同于单纯的语法糖,而是一种语言级别的增强,添加了oo的概念。当然oo也不是什么好词儿了已经。但如果一个大型项目,css这种纯描述型的语言,没有什么抽象层次的缺点真的很致命。所以如果有了oo的话,那真的可以减轻很多维护的成本,而且可以更容易的把css这部分代码组织起来,形成层次感。还有一点好处就是低入侵,我的意思是即便你原有的css什么都不改,照样可以在sass里面work,你可以一点点的把现有的css迁移到sass中,然后利用sass的oo特性,将代码更合理的组织在一起。当然,语法上也确实简洁了,但并不是haml那种颠覆似的纯语法层面的改革,而更主要的是在语言层面的增强。所以,综合来说,我认为sass还是值得采纳的。因为让css具备了层次结构,这在css变得庞大之后如何分类,组织提供了很好的方向。
coffeescript,最后说本文开头谈到的主角吧。其实我很久之前就和team share过几篇coffeescript的文章,当时就有人说要慎重。但其实当时大家紧张了,我只是想分享一些新奇的东西,让大家开开眼界而已,所以这次讨论我的观点也是慎用或者暂时不用。因为coffeescript的各种改变更类似于haml,只是单纯的语法上的装饰,方式温柔多了,但还是并没有太多本质的提升,可以说就是一门DSL而已,而这门DSL的目的只是为了更简洁,更富有变现力一些而已,并且也基本上只限于ruby guys,让一个java程序员来接触,指不定丫还觉得js比cofeescript符合审美,看着舒服呢。同样有着和上面两者通用的一个缺点就是需要大脑转换,毕竟,coffeescript目前只是一个转换器,你在浏览端看到的还是js,还是需要你人脑转换。所以同样我认为还是弊大于利。当然,如果某天引擎直接支持coffeescript了,那么我就立刻觉得这东西好感度++了,毕竟不需要多一层转换之后,再和Javascript PK的话,劣势就只有不如JS的历史积累了,但相信coffeescript语法带来的美感就可以打败javascript的累计了,至少在愿意追求美感的程序员里,高下立判,就是coffeescript赢了。而且JS迁移到coffeescript也不会像html to haml那么痛苦了,因为并不是语法上的颠覆,只是一种改良,这就好很多而且很对路了。
所以综合来说,在我眼里,这三门语法糖的比较是,sass应该是未来最有希望的一个,因为能解决一些实际的问题,但场景并不一定很多。而coffeescript的未来还有待观察,因为缺乏浏览器引擎原生的支持,但思路还是很不错的。而haml,这种反人类反直觉的产物还是早些消失吧,除了在不熟悉前端的后端程序员的toy project里,其他地方不应该有这种搞笑的存在。
web这么多年下来,html/css/javascript这三门语言已经经历了时间的考验,已经算是web开发中的standard了,任何新生的语言,想要和这三者竞争,都是一个非常困难的事情,所以在这三者基础之上的改良成为了唯一比较可行的路子。其中,刚才说的三样语法糖都有着一些不可避免的弱点,但sass和coffeescript都有着各自的好处,也许未来都能得到不同程度的发展,而haml,我还是从接触的最一开始就不看好的。
好了,不说了,就立贴为证,过些年看吧。