你的命名,我看不懂!

“好的代码都是相似的,坏的代码各有各的不同!” 就说最基本的命名,好的命名像是自带注释,一眼望去就能知道代码的大概意思。而差的命名简直像一团乱麻,让人越看越气!

1 重要性

在代码编写中,写的最多的绝对是各种函数、变量等的名称,而大多数这些名称都需要你通过主观想法指定。很多人不在意这些,觉得没什么用。觉得即是有用的,好的和坏的也差不了多少,实在不行加点注释就好了。其实一个好的名字,不仅能让代码变得易于理解,更能提升编码效率,而且会令人赏心悦目。

让我们看个🌰:

1
2
3
4
5
# 反例
i1 = 2
j2 = 3
ll = i1 + j2
print(ll)
1
2
3
4
5
# 正例
score_first = 2
score_second = 3
total_score = score_first + score_second
print(total_score)

对比「正例」和「反例」,你更喜欢哪个?

2 命名原则

2.1 名副其实

名字要表达它本身的含义。

1
2
# 反例
d = 2 # 创建了多少天
1
2
# 正例
days_since_creation = 2 # 根本不需要注释

2.2 避免误导

名字要警惕和保留字,已经一些有歧义的缩写等冲突。

1
2
3
# 反例
with = [1, 2, 3]
l = 1
1
2
3
# 正例
l_nums = [1, 2, 3] # with 是 python 的保留字
label = 1 # l 和 1 很容易弄混,类似的还有 0 和 O

2.3 有意义的区分

没有意义的区分容易造成误解,引起不必要的麻烦。

1
2
3
4
5
6
# 反例
def copy_char(a1, a2):
pass

get_mongo()
get_mongo_info()
1
2
3
4
5
6
# 正例
def copy_char(source, destionation): # 上文中的 a1 a2 并没有提供出正确的信息
# 其中的1、2也被称为魔法数字,是因为它是莫名其妙的出来的
pass

get_mongo() # get_mongo 和 get_mongo_info 在没有特殊约定的条件下很难区分

2.4 使用读得出来的名字

人类的大脑有一块重要的功能是用来处理语言的,加以善用,事半功倍。

1
2
3
# 反例
def gen_ymdhms(): # 生成日期,年、月、日、时、分、秒
pass # 你试试读下这个函数名
1
2
3
# 正例
def generation_timestamp(): # 你再读下这个
pass

2.5 使用可搜索的名称

先说一条原则:

名称长短应与其作用域大小相对应。

想要从一大篇文字中找到单字母变量不是一件容易的事情,因为包含这个字母的代码太多了。

1
2
# 反例
d = 3 # 搜索 d 的话,会找很久
1
2
# 正例
days_since_creation = 3 # 搜索这个名字,可以快速定位

3 神器

综上所述,取个好名字真的很难,那有没有什么高级的辅助工具呢?

试试变量名搜索工具 CODELF ,它可以搜索来自Github,Bitbucket,Google Code,Codeplex,Sourceforge,Fedora Project,GitLab的项目,以查找实际使用变量名称。

而且 codelf 还有各种编辑器的插件,比如常见的 VS Code、Atom等,快去试试吧!

4 参考

作者

Ailln

发布于

2018-06-22

更新于

2024-03-02

许可协议

评论