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

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

你就不知道它是什么。

如果你不知道这是什么,

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


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

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

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 28,589评论 5 20
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • TCP协议里窗口机制有2种:一种是固定的窗口大小;一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。对所有数...
    元素周期表的十七君阅读 4,221评论 0 1
  • 麻木不仁 停休第八天 依稀记得接到停休的消息伊始,微笑着和其他部门的同事说着“没关系、习惯了”等宽慰的话,内心却有...
    狼_左瞳_冷色调阅读 1,544评论 0 2
  • 我们说好的,麦子熟了我们便去麦城。这话说了很多遍,似乎我早忘记是梦里发生过的场景还是电影里的某句台词,但麦子熟了很...
    蔻潍稱阅读 2,144评论 0 1

友情链接更多精彩内容