文档章节

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

sailor33
 sailor33
发布于 2015/06/11 14:13
字数 930
阅读 13
收藏 0
点赞 0
评论 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
昌平
敲击最多的键和编程语言语法

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

红薯
2011/09/23
2.9K
33
[数据可视化]哪年高考最难?哪里高考最难?

一年一度的高考又到来了。虽然对于大多数人来说,高考已经是过去的事情了。但每年到了这个时候,又难免再次想起那种被支配的恐惧。譬如03年的江苏数学卷,十多年过去了仍不断被人提起。作为当...

crossin
06/28
0
0
帮开发者命名变量的开源搜索服务--Codelf

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

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

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

oschina
2016/01/11
6.9K
25
iOS ReactiveCocoa (1)简介和安装

简介: ReactiveCocoa,简称RAC,是函数响应式编程框架。RAC具有函数式编程和响应式编程的特性。它主要吸取了.Net的 Reactive Extensions的设计和实现。 为什么我们要用它 1) 开发过程中,状...

魔笛GNR
2016/07/30
50
0
AI快速入门学习的经验积累-最佳学习路线图谱梳理

一 最难的一件事 要成为大牛,其实不难,只需要做一件事 -- 学习;然而其实也很难,因为必须做到一件事 -- 坚持学习。无关智商,无关信仰,能否坚持到底,至关重要。 白天要上班,往往要加班...

ebzxw
05/13
0
0
哈,如何命名竟然是程序员最难攻克的关卡?

对于软件开发人员来说,最大的难题是:如何命名(例如:给变量,类,函数和过程命名等等)。 该结果是来自 Quora 问答网站和更早的 Ubuntu 论坛跟帖的 4500 个开发者的投票。如何命名一项的选...

问题终结者
03/27
0
0
调查结果显示:如何命名成为了程序员最难攻克的关卡

对于软件开发人员来说,最大的难题是:如何命名(例如:给变量,类,函数和过程命名等等)。 该结果是来自Quora问答网站和更早的Ubuntu论坛跟帖的4500个开发者的投票。如何命名一项的选票几乎...

周其
03/16
0
0
我读--读书笔记整理

第一章 整洁代码   "我可以列出我留意到的整洁代码的所有特点,但其中有一条是根本性的,整洁的代码总是看起来像是某位特别在意他的人写的.几乎没有改进的余地,代码作者设么都想到了,如果你企...

冬至饮雪
2017/08/22
0
0
没有对比就没有伤害,优秀的代码VS糟糕的代码

可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比。—— Robert C. Martin, “Clean Code” 如果你还没有发现代码质量的区别,如果你从未见过优秀的代码,或...

急速奔跑中的蜗牛
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
19分钟前
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
40分钟前
0
0
HTTP协议通信原理

了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。 HTTP使用...

寰宇01
今天
0
0
【Java动态性】之反射机制

一、Java反射机制简介

谢余峰
今天
1
0
Centos 6.X 部署环境搭建

1.Linux学习笔记CentOS 6.5(一)--CentOS 6.5安装过程

IT追寻者
今天
0
0
博客即同步至腾讯云+社区声明

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=8vy9bsmadbko...

xiaoge2016
今天
1
0
大数据教程(3.1):Linux系统搭建网络YUM源服务器

博主在前面的2.5章节讲述了linux系统本地YUM服务器的搭建和httpd轻量级静态网站服务器的安装,本节博主将为大家分享内网环境中搭建自己的网络YUM服务器的全过程。如果大家对本地YUM服务器还不...

em_aaron
今天
1
0
蚂蚁技术专家:一篇文章带你学习分布式事务

小蚂蚁说: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务...

Java大蜗牛
今天
1
0
新的Steam应用将拓展服务项目

导读 未来几周,Steam将推出两个免费的应用程序Steam Link和Steam Video。这两个应用程序都旨在拓展Steam平台的业务和便利性。 即将开放的Steam Link应用程序最先提供了Android测试版,它将允...

问题终结者
今天
0
0
golang 第三方包的使用总结

golang 第三方包的安装的方法: 1. go get 安装 $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时...

科陆李明
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部