实践中的总结三:命名

2024/07/04 总结 实践 共 823 字,约 3 分钟

命名

一句话总结:认真命名,命名是第一次抽象,名需要尽力与逻辑一致,随逻辑变更。

同时,合理组织的逻辑必然易于命名,难以命名时可以尝试调整逻辑,重新抽象组织。

简介

命名是逻辑首当其冲的抽象,是一次保证一致性的尝试,也是必然失败的一次尝试:名字只能暗示它所代表指明的逻辑,必然不能与逻辑一致,逻辑里必然有命名无法提及的细节。但好的命名,理顺命名者的思路,能作为一个提示,帮助其他人阅读你的代码:什么是重要信息,什么可以忽略。

这里也和之前 实践二 的内容呼应了,以函数副作用来实现功能的函数,会很自然的变得不好命名,而完完全全只依赖返回值的函数,自然而然地容易命名。

好的命名:不需要多余注释,指向内容不包含名字里没有的逻辑,不会引发歧义。在这里,保持清晰比简洁重要。

可以尽量和项目的风格保持一致,还有尽量使用常见的,已经约定俗成的一些名词。比起如何合适用名字来完整概括内容来说,这已经是细枝末节了。

例子

不好的例子:

func existIt(list *[]int) bool {
	a := 1
	for _, i := range *list {
		if i == a {
			*list = append(*list, a)
			return true
		}
	}
	return false
}

名字叫 existIt却在list里加了个元素,太有误导性了。

我们日常经常在原有函数基础上增加逻辑,不愿意修改别人的代码,自然不愿意重命名,经常会出现这种情况。而且添加的逻辑越小,就越不愿意改名,也越不容易发现,相对的破坏能力越强。

func existItAndAdd(list *[]int) bool {
	a := 1
	for _, i := range *list {
		if i == a {
			*list = append(*list, 3)
			return true
		}
	}
	return false
}

好多了。

总结

认真命名是一种对设计能力的训练,一次命名是一次封装,将应该在同一层级的逻辑,自然封装在同一深度,设计清晰,命名也会变得自然。

文档信息

Search

    Table of Contents