软件中随处可见命名,我们给变量,函数,参数,类,包。给源代码及源代码目录命名,给jar文件,war文件,ear文件命名,我们命名,命名,不断命名。既然有这么多命名,那么我们就有必要做好它。
选个好名字要花时间,但是节省下来的时间比花掉的多。注意,一旦有好的命名,就要替换掉原本旧的名称。认真对待每个变量名,你当用自己第一个孩子般的谨慎给变量命名。
给变量命名是开发的基础,看起来是小事,然成败在于细节之中,不要忽视它的重要性。
基本的命名法则
- 不要定义一些与系统名称相冲突的变量名,比如定义数据库的order字段会报错。
- 不要定义太长的变量名,比如
XYZControllerForEfficientHandingOfStrings
和XYZControllerForEfficientStorageOfStrings
区分起来的麻烦 - 类名一般是名词,方法名一般是动词
- 避免留下掩盖代码本意的错误线索,避免使用与本意相悖的词。
- 尽量见名知意
做有意义的区分
废话是一种没意义的区分,假设你有一个Product类,如果还有一个ProductData和ProductInfo类,它们的名称虽然有区别,但是意思却无区别,info和data就像a,an和the一样,是意义含混的 废话。
如果缺少明确约定,变量moneyAmount就与money没区别,cusomerInfo与customer没区别,accountData与account没区别,theMessage与message没区别,要区分名称,就要以读者能鉴别不同之处的地方区分。
每个概念对应一个词
比如fetch,get,retrieve代表的都是获得的意思,但是如果在表达获得的时候三者混着使用,在当前文件的获得使用的是get,下个文件获得使用的是fetch,这样就容易造成混淆。
假设其余人看到你的程序,若同一个概念你使用的是同一个词,那么对自己对他人都是一种帮助。
避免思维映射
不要让读你代码的人把你所命名的变量在头脑中转换为另外一种概念。
单字母变量就是个问题,在作用域小,也没有名称冲突时,循环计数器,自然有可能被命名为i,j,k,这是因为传统上惯用单字母名称做循环计数器。
然而在多数情况下,单字母名称不是个好的选择,读的人必须要把它在脑中转换为真实的概念。
在你使用单字母做为变量的时候,在搜索这个名称的时候就出现了问题, 太多单词都会包含你所定义变量名的字母。
普通聪明程序员和专业程序员的区别在于,专业程序员了解到,明确才是王道
语境
添加有意义的语境,不要添加没有意义的语境。
设想你有名为firstName、lasiName、street、houseNu田ber、city·state和zipcode的变量。当它们在一块儿的时候,很明确是构成了一个地址。不过,如果只是在某个方法中看见孤零零一个state变量昵?你会理所当然推断那是某个地址的一部分吗?
可以添加前缀addrFirstName、addrLastName、addrstate等,以此提供语境。至少,读者会明白这些变量是某个更大结构的一部分。当然,更好的方案是创建名为Address的类。这样,即便是编译器也会知道这些变量隶属某个更大的概念了。
所谓不要添加无意义的语境,当你的名字也许短小,但是足够清楚的表达你想表达的意思的时候,就无需添加额外的语境。
Address是个好名称,不过若与Mac地址,端口地址,Web地址区别,可以考虑使用PostalAdress,MAC,URI来区别,因为大家虽代表的是地址,但意思上还是有区别的。
最后
这里没有展示案例,纯理论看起来理解起来相对费力一些,建议购买《代码整洁之道》
让自己的代码更好,通往编程大神之路。