如何命名:编程中最难的事1

本文译者:isaced       审校:李庆

原文链接:slideshare

译文链接:JF杰微刊出品

本文由杰微刊编辑人员在译文基础上编辑而成。如有问题,欢迎交流。

如何命名,其实是编程中最难的事。

乔治·奥威尔的命名规范

如何命名?

简言之,根据语意来选择词汇,别无它法……然而,有时我们会不知用什么词汇更合适。

当你想到某个抽象的东西,你更倾向于最先想到的词语,除非你故意不这样,这些词也会抢着出现,直到模糊或改变你的想法。

当你想到一个具体的对象,你觉得词穷,然后你想描述的已经看到了,然后你继续寻找更适合它的词。

六条原则

以下是乔治给出的命名六原则:

1. 绝不要用隐喻,明喻或者是其他书本上看到的语言描述方式

2. 绝不要用太长的词汇,如果一个短的词汇已能说明问题

3. 如果可能缩短用语,就尽量缩短

4. 绝不要用被动语态的词,如果能用主动语态的词

5. 绝不要使用外来词汇,学术术语,如果你能想到意思相近的日常用语

6. 打破上述任何规则,相比更加直接明了的说话方式

这些规则听起来很条文,确实也是如此。但对于那些习惯了流行的写作风格的人来说,这几点却尤为重要。下面具体来解释这六条原则。

1、绝不要用隐喻,明喻:以防过度使用惯用的设计模式,只是因为在代码中看惯了。如:

AbstractCon?gurationFactory

2、只要能短就不要用长词:如果一个短的词汇已能说明问题,则尽量使用简洁的变量命名,仅在有更好的理由的前提下才使用长的命名。如:

company_person_collection

vs

Staff

3、如果可能缩短用语,就尽量缩短:避免添加一些毫无意义的词汇到命名中。如:

AbstractObjectFormatterProxy

……

org.springframework.web.servlet.support.

AbstractAnnotationCon?gDispatcher

ServletInitializer

“这就像是同类疗法。你所应该做的就是简化,直到什么都没有。 ”By Kevlin Henney。

4、尽量用主动语态的词:能用主动就绝不用被动语态的词,便于用户理解,同时也遵守标识符的语法规则。
如:
class PlanEvents
vs
class EventPlanner,或者甚至是class Scheduler。

5、尽量用日常用语,避免使用外来词汇或学术术语,不要让来自某个库的专用术语污染你的领域模型,同时也提防那些从其他语言导进“外来”命名的库。
如:ShipmentMonad

6、打破上述任何规则,如果你有更简单明了的表述方式。当然,如果你的代码正刊登在众多知名的网站,如The Daily WTF,你可以忽略我说的话。(The Daily WTF,美国著名丑陋代码开发、灾难开发案例网站。)

注:许多取决于上下文;

当然,发布库代码和维护私有程序代码是不一样的。

听到这,是不是感觉写代码和写散文一样困难?

未完待续。

继续阅读:写作与编程的共性——《如何命名:编程最难的事》续

[ 转载请注明JF杰微刊出品、译者和译文链接。]

时间: 2024-11-03 12:44:32

如何命名:编程中最难的事1的相关文章

(转)Attribute在.net编程中的应用

Attribute在.net编程中的应用(一)Attribute的基本概念 经常有朋友问,Attribute是什么?它有什么用?好像没有这个东东程序也能运行.实际上在.Net中,Attribute是一个非常重要的组成部分,为了帮助大家理解和掌握Attribute,以及它的使用方法,特地收集了几个Attribute使用的例子,提供给大家参考. 在具体的演示之前,我想先大致介绍一下Attribute.我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢

[转]Attribute在.net编程中的应用

Attribute在.net编程中的应用(一) Attribute的基本概念 经常有朋友问,Attribute是什么?它有什么用?好像没有这个东东程序也能运行.实际上在.Net中,Attribute是一个非常重要的组成部分,为了帮助大家理解和掌握Attribute,以及它的使用方法,特地收集了几个Attribute使用的例子,提供给大家参考. 在具体的演示之前,我想先大致介绍一下Attribute.我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西

编程中的命名设计那点事

编程中的命名设计那点事 在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的. In the beginning was the Word, and the Word was with God, and the Word was God太初有道.道与神同在,道就是神. (约翰福音第一章,第一节) 在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但是如果坏的命名那一定不会给你带来好的设计.在设计过程,如果你发现你很难命名某一个模块,某个方法时

作为一个程序员编程中经常碰到且觉得难的事是什么?

作为一个程序员编程中经常碰到且觉得难的事是什么?有人说,感觉最难的是 trade-off:也有人说,给函数和变量起一个不用写注释的名字:架构师说,预测需求的变化比较难:一线码农说,写出可被长期维护并持续产生价值的代码是最难的.你觉得编程中经常碰到且觉得难的事是什么? 比如用新技术做项目,编写到80%-90%左右,发现了更优的方案,然后在重构和继续之间取舍......变量命名难:编码进入超凡状态时被打断 ? 还是双方对接,涉及到加解密算法,对方又不给你提供明确说明的,比如RSA吧,虽然都叫RSA,

Java编程中“为了性能”需做的26件事

摘要:最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 本文参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用

编程中的匈牙利命名法

匈牙利命名法,是一种编程时的命名规范.基本原则是: 变量名 = 属性+类型+对象描述 其中,每一个对象的名称都要求有明确的含义,可以取对象名称全称或名字的一部分.命名要基于容易记忆和容易理解的原则.保证名字的连贯性非常重要.常见的匈牙利命名规则如下: 例如,表单的名称为form,那么匈牙利命名法中可以简写为frm.当表单变量名称为Switchboard时,变量全称应该为frmSwitchboard.这样,可以很容易从变量名看出Switch是一个表单.同样,如果此变量类型为标签,那么就应命名为lb

编程中三种命名方法——匈牙利命名法、骆驼命名法、帕斯卡(pascal)命名法

代码风格是一个可重不重要的东西,虽然,不影响代码正确性,但是其实,非常的重要,通常在项目中,不能随便写代码,需要有一点的规范,命名法便是其中一个比较重要的一点. 通常我自己有一套命名法,结合匈牙利法(主要是数据类型这块,因为嵌入式,数据类型比较重要,毕竟资源比较少的),其次是其他两种方法结合,下面说说主要的三种命名法. 以下文字为转载的,说的比较清晰,很多人已经逐步抛弃匈牙利命名法,因为缩写不易懂,而且现在命名也不行定长度,不想以前,命名长度都是尽量短.时代在进步~ 一.匈牙利命名法: 广泛应用

编程中易犯错误汇总:一个综合案例.md

# 11编程中易犯错误汇总:一个综合案例 在上一篇文章中,我们学习了如何区分好的代码与坏的代码,如何写好代码.所谓光说不练假把式,在这篇文章中,我们就做一件事——一起来写代码.首先,我会先列出问题,然后要求读者自己写一份答案:然后,我会给出我写的代码:最后,我们还会以这个问题为例,讨论编程中常见的错误. ## 1 问题描述 在[这个](http://wiki.openhatch.org/index.php?title=Scrabble_challenge)页面中,有一道Python相关的练习题,

Java编程中“为了性能”尽量要做到的一些地方

下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问: 第二,控制实例的产生,以达到节约资源的目的: 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2. 尽量避免随意使用静态变量 要知道,当某个对象被定义为stataic变量所