如何检验一个命名的好坏

103 阅读2分钟

检查一个命名的好坏, 有一个简单(但并不是唯一)的方法 "把命名谷歌翻译成英文, 再把这个英文谷歌翻译成中文, 最后看这个中文是不是好理解”.

比如 getTitleAndItsChildrenIDs, 名字很长, 但真的意味它是一个坏的命名吗?

让我们试试把他翻译成英文, "获取标题及其子标题 ID”.

根据这个翻译过来的中文, 我们其实可以很好地推断其含义, 那么说它是一个 "坏命名”, 有些委屈它了.

同时, 不同编程语言背景的人, 使用的命名风格也是差别很大.

可能使用了一些命名法, 这种命名法, 可能在某一些社区被宽泛采纳的, 但在这些社区之外的人看来, 是难以理解的.

举一个 Github/fp-ts 上的源码

export const last: <A>(as: Array<A>) => Option<A> = RA.last

这里的 as , 在函数式编程里是常见的命名法, a 代表泛指(泛型), 可以理解为 "anything”, 而 s 代表是复数, as 代表的是 "泛指的列表”(泛型列表).

在强类型的函数式编程中, 往往根据类型来表意, 而不是命名.

比如在 Haskell 中, 其类型系统如此之强大, 根据一个命名的类型, 往往已经可以推断其含义和作用.

这个时候便会使用一些宽泛的命名法, 比如单字母 a 或者 as.

但在业务代码中, 应避免使用 item , info, 特别是在没有类型的情况下.

还有一些命名法, 涉及一些英文缩写, 比如一个 Map userId2Books, 中间这个 "2” 看起来很 "奇怪”, 但它其实是 "to” 的意识, 用谷歌翻译成中文 "用户 ID 到书籍”, 它表达的是一个 "用户 ID 到书籍” 的 Map 映射.