译者:isaced 审校:李庆
原文链接:slideshare
译文网址:JF杰微刊出品
本文由杰微刊编辑人员在译文基础上编辑而成。如有问题,欢迎交流。
在此前的《如何命名:编程中最难的事》《编程如何命名二:写作与编程的共性》中,分别和大家聊到命名的一些规范,以及作家创作作品和编程的共同之处等话题,今天我们接着聊编程如何命名之三:糟糕的编程命名的特点有哪些,怎么避免。
运用正确意味着每一个词都要用的恰到好处。
关于命名 ——菲利普·卡尔顿(Phil Karlton)
计算机科学有两个艰难的事:
1.缓存失效 ;
2.命名。
关于不好的命名——刘易斯·卡罗尔(Lewis Carroll)
当我使用一个词,胖墩儿说是一种轻蔑,当然这也正是我本事的意思-不多也不少。
爱丽丝奇遇记中,透过镜子,爱丽丝究竟发现了什么?(1871)
故意无意义的名称
理论上讲,foo仅仅作为一个占位符名称(因为它无任何含义)
关于命名——萨姆·加德纳(Sam Gardiner)
“如果你不知道一件事物叫什么,
你就不知道它是什么。
如果你不知道这是什么,
你就不可能坐下来写代码。”
什么是最糟糕的变量名?
——data
什么是更糟糕的变量名?
data2
什么是第三糟糕的变量名?
data_2
缩写容易引起歧义
以英文为例, char 是 character(字符) 还是 characteristic(特点)?
mod 的意思是 modify(修改) 还是 modulo (模)?
acc,pos或者auth呢?
另外, fab 只是一个函数,ƒ:A➞B 。
而不是 fabulous (传说)
允许一个例外:ID 作为 “identity” (身份)
一个字母太短
局部变量:它的含义是什么?
var a = 42;
这一个是例外:
for (int i = 1; i < 42; ++i)
改成 ii,jj,kk 也并不好
函数式编程:一个字母仍然太短
def modp[C](f: B1 => (B2, C), a: A1): (A2, C) = { |
val (b, c) = f(get(a)) |
(set(a, b), c) |
} |
代码出处:第70行
可以用特定含义的词代替更多的词
什么是appointment_list?
A calendar?日历?
什么是company_person?
Employee普通职员 或者是owner老板?
什么是text_correction_by_editor?
只是一个edit-编辑。
模糊语言是模糊的
艾伦·格林写了一些模糊的词,如:
InvoiceManager、TaskManager
‘Manager’ 非常不准确,其含义之一可能是你想要的字:
Bucket, Supervisor, Planner, Builder
原文地址:点击查看
代码里的模糊用语
get在方法名的开头只用于返回一个字段值。
如果不是这样,或者从其他地方得到的数据, 用其他的词:
fetch, find, lookup, create, calculate, derive, concoct.
错误的词是错的,同义词易混淆
order ≠ shipment
carrier ≠ broker
shipment ≠ transport leg
shipment = consignment
carrier = transporter
transport leg = journey
Java企业中间件示例 - Apache Camel
JF杰微刊出品: Apache Camel- http://camel.apache.org
再探属性访问器
在许多库中, 这些方法名称将是不可抗拒的,但不建议使用:
getEven
getReal
getAround
getRoundTo
getRichQuick
getJoke
糟糕命名的总结
无意义:foo;
太一般:data;
太短:a;
太长:text_correction_by_editor;
缩写:acc;
模糊:InvoiceManager;
错误:order;
只是不好笑:startCamel
未完待续。
原文链接:slideshare
译文链接:JF杰微刊出品
[ 转载请保留原文出处、译者和译文链接。]
相关文章:
《如何命名:编程中最难的事》
编程如何命名二:写作与编程的共性