糟糕的命名:编程最难的事3

2015-06-10  本文已影响141人  sailor33

如果你不知道一件事物叫什么,

你就不知道它是什么。

如果你不知道这是什么,

你就不可能坐下来写代码。”


文章转载自杰微刊,是一个全新的技术原创平台,尽管在这里介绍容易招来推广之嫌,但是,文章的每一个字,都是经过的细细雕琢,即使能引来大家的质疑和批评,也乐意听取,不断改进自己。

运用正确意味着每一个词都要用的恰到好处。

关于命名 ——菲利普·卡尔顿(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


未完待续。


原文地址:JF杰微刊出品


上一篇 下一篇

猜你喜欢

热点阅读