谈谈模板引擎的设计:为什么大家都喜欢$

翅膀的初衷

发表于2014-10-22 22:59:55

做为一个软件开发人员,特别是一个WEB开发人员,相信大家每天都要同$这个标记打交道,虽然它本身意思是指美元,但是工程师们赋予了它更多的意义。

$在JNTemplate的模板中,是一个模板语言标记,表示下面的内容是一段需要解析的模板语言,在jnt中,模板语言的完整写法是${ 模板语言 },通常情况下简写成 $模板语言


虽然在各式各样的模板引擎中,用来做模板标记的字符有很多,比如:

1.尖括号,例如:<% 标记 %>,<? 标记 >

2.双大括号,例如:{{ 标记 }}

3.其它标记,如:${ 标记 },@{ 标记 }


但是如果你只能使用一个符号来做标记,大家都不约而同的使用了$,甚至在JS的大多框架中,也都喜欢用$.

当然,微软是个特例,因为它用了@,就像所有其它所有人的文件路径都用/而微软却独立特行使用\一样。


那么为什么大量开发者会优先选择$呢?

选用标记我们应该保持一个标准:即通用,好写,易区别。

首先:我们应该排除所有的全角字符,汉字等特殊字符。如果你用了这些字符的话,第一个输入会比较麻烦,因为你需要切换输入法来打出这个标记符号,然后再切换输入法来输入接下来的英文字符(别告诉我你是用易语言的),同时,对使其它语言操作系统开发者造成困扰。所以,这类特殊字符完全可以排除。

第二:不能使用A-Z 的26个字母与0-9的10个数字,因为容易混淆。假如你用y做标记,你很难区分它是一个单词还是一个标题,而且在模板中,不利于识别。

第三:不能使用加减乘除及分号逗号句号等常用符号,原因同上。


排除以上的,其实大致可选的范围很小很小了,个人觉得比较理想的就只剩下#,@,$等等这几个。

#号的话,因为HTML在的锚链接会大量用到#号,而且还有不少场景会用到它,增加了判断难度。

@虽然只有EMAIL会用到该符号,但是近来微博等社交元素的流行,@开也可始使用得更加频繁了。

剩下的就只有$,而且它还具有以下优点:

1.输入简单,任何语言环境,操作系统都可以使用。

2.基本不存在误判,因为它的使用场景一般是做价格标识,后面不是接空格就是接数字,很容易识别。

3.$是所有符号中唯一(如果还有其它请大家提出)可以在JS用来做变量名的符号,这也是很多JS框架喜欢使用$符号的原因之一。


而JNTemplate正是基于以上考虑最终使用了$来做模板标记,而且判断更加精准,解决了很多引擎与jquery冲突的问题,有兴趣的大家了解下jntemplate,asp.net的开源模板引擎。传送门