相信大家都见过骆驼,驼峰是骆驼的标识,驼峰呈波浪型,对比于计算机语言中的字符串,是非常相像的。编程语言中的字符串大多由大小写混合的字母(这里数字理解为小写字母)组成,并有一定的规范,如首字母小写、首字母大写、单词下划线分割等,在这里我们可以将大写理解为驼峰,这样字符串也具有波浪型结构啦,如果我们将原字符串中的大写字母提取出来(不包含数字),这也是下面所说Camel Case规则,形成新的字符串,这就是原字符串Camel Words(都是大写字母)。Camel Words其实是依据Camel Case原则对某一字符串信息的抽象提取,在这里我们将Camel Case翻译为驼峰匹配,将Camel Words翻译为骆驼字,准确地说应该为驼峰字,但觉得骆驼字似乎更好听些,且骆驼的只要标识是驼峰,使用骆驼字这个名称也很容易理解,而且在IDEA下对Camel Words进行了扩展(可以包含小写字母和匹配符*,不仅仅是大写字母),这里我们就以骆驼字为Camel Words的中文译文。下面我们就看看具体的转换例子:
字符串名称
对应骆驼字
UserManager
UM
UserManagerImpl
UMI
getUserNameInfo
UNI
userBankAccountNumber
BAN
说了这些,下面我们就看看在Java的编程语言中的这种原则的体现。Java中的包名、类名、函数名及变量名等都是字符串,规则也是很明显:类名需首字母大写,包名、函数名及变量名应首字母小写等,有了这些默认规则,相信这对字符串的骆驼字的提取更方便且容易理解。而且提取的骆驼字也更能反映原字符串的组成信息。说了这么多,还是让我们看看如何利用骆驼字简化我们的编码,这里我们将向您推荐IntelliJ IDEA工具,这也是支持这一特性的最好工具。
IntelliJ IDEA对骆驼字进行了扩展,允许在Camel Words中包含小写字母(自动匹配至单词结尾)和“*”,实现了模糊匹配。IntelliJ IDEA下实现严格的字符串首字母匹配(大小写无关),所以首字母的信息很重要,如果您想实现前缀的模糊匹配,请添加“*”字符。
字符串名称
IDEA下允许的骆驼字匹配
UserManager
UM,UMa,UsM
UserManagerImpl
UMI,*MI,U*M
getUserNameInfo
gUNI,*UNI
userBankAccountNumber
uBAN,*BAN
有了这些规则,下面我们将看看几个具体的应用。
1 文件或标记的导航:在编码中我们有时要迅速打开某一文件或定位到某一文件指定的位置,如函数声明处,类属性声明处等。如定位到UserManager这个接口文件,我们只需按下Crtl+N(接口或类文件定位),在输入框中输入UM,则就可以定位到这个java接口文件,同样输入UMI我们可以定位到UserManagerImpl这个Java实现类。如果定位到函数名或变量名,我们只需按下Crtl+Alt+Shift+N(标识定位),在输入框中输入gUNI或*UNI就可以定位到getUserNameInfo这个函数申明的位置,容易输入uBAN可以定位到userBankAccountNumber属性声明处。由于Java中的函数名和变量名通常以小写字母开头,而IDEA又要求实现严格的前缀匹配,所以利用骆驼字进行函数名或变量名定位必须以首字母(小写)起始或“*”字母起始,这样实现骆驼字匹配,否则可能得不到您想要的结果。同样使用文件定位Crtl+Shift+N只需结合以上Crtl+N和Crtl+Shift+Alt+N这两种情况即可。
图1:接口和类匹配
图2:接口或类属性匹配
2 变量名提示:在编码过程中,我们要声明大量的变量,给这些变量命名有时非常繁琐,浪费你不少时间去思考一个合适的名字。我们看一个情形,在使用Velocity开发包时,我们用到一个类VelocityEngine,我们想实例这个类,我们在键入类名加空格,然后按下Crtl+Space(基本代码完成功能),你会发现IDEA给您提供了候选变量名,这些规则也是根据驼峰匹配原则生成的变量名,且进行了大小写替换,这里我们选择“engine”这个变量名,完全符合我们的意愿。 如果你输入骆驼字中某一字母的小写形式,在按下Crtl+Space,则IDEA自动帮您完成变量名称(依据骆驼字中选择后余下字母生成),这里如果输入e,在按下Crtl+Space,则engine自动补齐。
3 编辑方面:我们知道在Editor Options的设置中,有这样一个属性:Use 'CamelHumps' words,如果您选择了该选项,IDEA将会意识到字符串的分词功能,这也是基于驼峰匹配的原则。选择此行配置,它会影响到光标移动(Crtl+Right/Left),光标处选词(Crtl+W),删除字符至词首或词尾(Ctrl + Backspace/Delete),及鼠标双击选择,这项功能可能各个人看法不一,是否选择该项功能请自己斟酌体验。
4 重构方面:IDEA的重构功能已经非常出色,怎么还需要说?这里有一个重构利用骆驼字进行重命名的技巧。让我们看看这样的一个例子:你定义了一个接口,取名为UserManagor,这里你误将“Manager”写为“Managor”,同时你实现了该接口,有两个类:UserManagorHibernateImpl和UserManagorJdoImpl,在编码中,你也一直依据骆驼字原则选择managor作为UserManagor的实例名称。在项目进行一段时间有,你发现UserManagor拼写错啦,如何更改?IDEA会给你惊喜,当你重命名UserManagor为UserManager时,IDEA会提示你是否将UserManagorHibernateImpl更改为UserManagerHibernateUtil,将UserManagorJdoImpl更改为UserManagerJdoImpl,更好的是,IDEA还提示你是否将managor变量名更改为manager,这一切你没有想到吧,骆驼字为重构带来了新的实现思想。
总结:骆驼字形式在IntelliJ IDEA主要体现在选择、提示和重命名等几方面功能,熟练使用好这项功能对您的代码开发会又很大的便利,在IDEA5.0中,会扩大这项功能在各个方面的应用,到时您会体会到更多的便利。
Camel Case最早出现在C2的wiki上,详细地讲解了这种原则,IDEA在此基础上进行了扩展并将其具体实现,并将其命名为Camel Words,介绍这方面的文章几乎没有也很少为人了解,希望这篇文章对您有一定的帮助,如果您有什么具体的问题,可以和linux_china@hotmail.com联系,我也处于摸索中。
Camel Case Reference:http://c2.com/cgi/wiki?CamelCase