软件杂谈(2)- 正名

正名者,辨正名分也。

这一篇,我们简短聊一个很多人不屑于聊的话题,程序中的命名问题。

也就是说,我们在写程序的时候,一个函数、变量、类、名空间文件到底应该如何辨正名分。

这个问题看似不值一提,可在大叔眼里,命名非常重要,名字好坏有可能决定程序的命运。

什么!什么!没这么严重吧?


-1- 正名很重要


古人云:“立品为先,字如其人”

意思是,先端正做人,再端正写字,通过写字能够影射出一个人的性格、心理、能力。

写程序也类似,通过代码中的命名也能够看出一个程序员的修养与功底。欲正其名,先正其心,一个连变量名都起不好的程序员,很难写出漂亮的代码。

《论语·子路》篇有“名不正则言不顺,言不顺则事不成”之说。名分不当、名实不符,说话就不合理,事情就很难办成。

程序既然是由编程语言表达的,名不正也会导致言不顺。命名不恰当,会造成大问题。如果你无法想出一个合适的名字,也许意味着你的设计有问题,需要加以重视。

试着想一想,假如把高级语言程序中的关键字、保留字、逻辑运算符号统统去掉,可不就剩下你那些命名了吗?这么大体量的内容,怎能不重要?

著名的问题调查网站Quora,曾经问过程序员觉得最难的事情是什么,经过大量反馈,命名占却了一半。

可见,命名是普遍问题,是难问题,是大问题。


那么,如何处理好这个问题呢?

大叔认为:欲正其名,必使其从类、符实、达意、守一,别无它法。

什么意思?让我们分而叙之。


-2- 从其类


所谓从其类,是说名字要能准确表达事物类别。

不需解释,这个名字是成员变量、是类、是方法、是函数,是单例、是集合、一目了然。

表达类别的习惯有很多,例如,用'm_'表达成员变量,‘f_'表明函数,前缀'_'表明私有,匈牙利命名法中把变量类型冠以名字。

这里不多累述,标准习惯实在太多,无论通用的还是公司自己制定的,统一即可。


-3- 符其实


所谓符其实,是说名字要能够符合事物的真实性。

既要简短,又无歧义;

要做到简短就要:

1)无多余表达

例如: isPageRedirectInCurrentWorkflow

如果没有Other Workflow的情况,InCurrentWorkflow就是多余的。

如果上下文就是表达Page Redirect,PageRedirect就是多余的。

例如: getAllCustomers

如果没有Partial Customers, All就是多余的。

例如:labelString

如果是表达label字符串,String是多余的。

2)无重复表达

例如:类Customer的实例方法getCustomerName

getName即可,不必重复Customer


-4- 达其意


所谓达其意,是说名字要准确表达意图。

命名常会用动词、形容词来加以修饰,选好修饰词也很重要。

“鸟宿池中树,僧敲月下门。” 

唐代诗人贾岛,为了斟酌“推”“敲”二字,行路中都在思考。准确表达命名的意图,也需要有推敲的精神。

例如:isXXX常用来判别变量是否是XXX类型。isShouldPay就不恰当,shouldPay即可;isInRange也不恰当, inRange即可。

例如:用getXXX, readXXX, fetchXXX, loadXXX要看行为的主体,有没有读取的过程,有没有网络传输,有没有加载的意图。

例如:少用when, if这些词。getPaymentPlanSchedulesWhenModification就是很丑的名字,可以用getModifiedPaymentPlan。

有些行业性软件,长久以来已经形成了些惯用的叫法,类似于行内话,最好能够参考行业惯例。


-5- 守其一


所谓守其一,是说名字要前后一致保持统一。

既是习惯的统一,也是情志的统一。

这一点非常重要,也是最常出的问题所在。即使命名不准确,也比前后不统一、混乱无章好。

例如:表达某个集合数据,有时候用data,有时候用items,有时候用list,有时候用collection,这就糟了。

命名的一致性,是代码整洁的基础,也能体现程序员修养的地方。

君子尚德,对内有诚的一面:言行一致,情志一致。对外有敬的一面:为人着想,不蔓不枝。

今天叫个猫,明天叫个咪,在这里不行。

事无巨细,欲写出漂亮的代码,要先从好的命名开始。

望诸君三思而命名。


-2018.07.04 蘭山 -

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,082评论 1 32
  • 要對自己足夠狠 才有可能得到想要的
    天娜日記阅读 156评论 0 0