文档章节

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

sailor33
 sailor33
发布于 2015/06/11 14:13
字数 930
阅读 16
收藏 0

译者: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杰微刊出品


[ 转载请保留原文出处、译者和译文链接。]


相关文章:

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

编程如何命名二:写作与编程的共性


本文转载自:https://www.jointforce.com/jfperiodical/article/show/791?m=d03

共有 人打赏支持
sailor33
粉丝 0
博文 1
码字总数 0
作品 0
昌平
私信 提问
构建&编写HTML邮件模板的二三事

< 文章标题 文章链接 为什么CPU时钟频率在过去5年里没有增加? http://www.jointforce.com/jfperiodical/news/show/321?m=d03 字体能否给人们带来信任感? https://www.jointforce.com/jfper...

sailor33
2015/06/18
1
0
敲击最多的键和编程语言语法

本文是从 Most Pressed Keys and Programming Syntaxes 这篇文章翻译而来。 我研究过很多编程语言;我经常的好奇于在面对这些不同的语法时,编程过程会有哪些不同,一种不同的语法会让你更富...

红薯
2011/09/23
3K
33
帮开发者命名变量的开源搜索服务--Codelf

"计算机科学里两件最难的事:缓存失效和命名。Codelf通过搜索在线开源平台Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Projec的项目源码,帮开发者从中找出已有的匹配关...

unbug
2015/12/16
577
0
Codelf 搜索开源代码帮程序员命名

"计算机科学里两件最难的事:缓存失效和命名。" Codelf通过搜索在线开源平台Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project的项目源码,帮开发者从中找出已有的匹配...

oschina
2016/01/11
8K
25
Codelf 搜索开源代码帮程序员命名

"计算机科学里两件最难的事:缓存失效和命名。" Codelf通过搜索在线开源平台Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project的项目源码,帮开发者从中找出已有的匹配...

linuxprobe
2016/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
11分钟前
0
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
19分钟前
0
0
第一篇:centos7下svn的安装与卸载

第一篇:centos7下svn的安装与卸载 2017年11月29日 00:10:53 独家记忆ly 阅读数:6108 这是我的第一篇博客,本人也是刚开始学习linux,如果有不对的地方,希望各位大神纠正指点。谢谢~~ 一、...

linjin200
20分钟前
0
0
el-tree 动态图标

举个栗子: https://jsfiddle.net/taadis/x9crjsum/

taadis
29分钟前
0
0
对Docker了解多少?10分钟带你从入门操作到实战上手

Docker简述 Docker是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windows10目前也原生支持,W...

别打我会飞
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部