命名是一件很困难的事情,naming-cheatsheet
是一个命名备忘录,记录一些常见的规范约定,试图让命名变得更容易。接下来我们就来介绍下 naming-cheatsheet
提到的一些规范约定。
/* Bad */
const primerNombre = 'Gustavo'
const amigos = ['Kate', 'John']
/* Good */
const firstName = 'Gustavo'
const friends = ['Kate', 'John']
不管你喜不喜欢,英语都是编程中的主要语言,几乎所有的编程语言的语法都是用英语编写的,以及无数的文档和教材也是。通过英语编写代码,可以大大提高其通用性。对于我们国内开发者来说,一定要避免拼音甚至是直接的中文命名。
选择一种命名的约定风格,并严格遵守它,可以是 camelCase
、ParscalCase
、snake_case
,或者是其他任何的风格,最重要的是要保持一致。许多编程语言在命名约定方面都有自己的规范,可以查看你所用的语言或者在 GitHub 上学习一些流行的源代码。
/* Bad */
const page_count = 5
const shouldUpdate = true
/* Good */
const pageCount = 5
const shouldUpdate = true
/* Good as well */
const page_count = 5
const should_update = true
命名应该简短、直观并且具有描述性:
Short
:简短,避免输入太长;Intuitive
:直观,命名必须自然地阅读,并且尽可能接近自然语言;Descriptive
:以最有效的方式反映其作用或目的。/* Bad */
const a = 5 // "a" could mean anything
const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural
const shouldPaginatize = a > 10 // Made up verbs are so much fun!
/* Good */
const postCount = 5
const hasPagination = postCount > 10
const shouldPaginate = postCount > 10 // alternatively
命名要简短,但是要避免钻牛角尖,命名最重要的是要让人能看懂,过度的简写只会降低代码的可读性。
/* Bad */
const onItmClk = () => {}
/* Good */
const onItemClick = () => {}
命名不应与定义命名的上下文重复,如果不降低命名的可读性,请务必从命名中删除该上下文。
class MenuItem {
/* Method name duplicates the context (which is "MenuItem") */
handleMenuItemClick = (event) => { ... }
/* Reads nicely as `MenuItem.handleClick()` */
handleClick = (event) => { ... }
}
命名应该能反映预期的结果。
/* Bad */
const isEnabled = itemCount > 3
return <Button disabled={!isEnabled} />
/* Good */
const isDisabled = itemCount <= 3
return <Button disabled={isDisabled} />
更多命名规范可以参考项目:https://github.com/kettanaito/naming-cheatsheet