代码命名规范指引

代码命名规范指引在项目中, 我们大部分时间都是在 命名, 给变量 命名 ,给方法 命名 等等。怎样生成 言简意赅的命名呢? 一个言简意赅的命名,可以让我们很通俗的联想到 这是要做什么(TO DO)的。而且使得我们项目

在项目中, 我们大部分时间都是在 命名, 给变量 命名 ,给方法 命名 等等。怎样生成 言简意赅的命名呢? 一个言简意赅的命名,可以让我们很通俗的联想到 这是要做什么(TO DO)的。而且使得我们项目更加的规范化。 下面 记录一下 在 js 中的来声明他们, 当然对任何的编程语言也是通用的。 project-rules: 这是一个关于项目代码规范的指引 (github.com)

一,命名变量

1. 在命名你的变量和函数时要使用英语

不管喜欢与否,英语是编程中的主导语言:所有编程语言的语法都是用英语编写的,还有无数的文档和教育材料。通过用英语编写代码,您可以显着提高其凝聚力。


/* Bad */

const primerNombre = 'Gustavo'

const amigos = ['Kate''John']


/* Good */

const firstName = 'Gustavo'

const friends = ['Kate''John']


2. 命名规范

选择一种命名约定并遵循它。它可以是 camelCasePascalCasesnake_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

3. S-I-D

名称必须简短、直观且具有描述性。

  • short 名称不得花费很长时间,因此请尽量简短。
  • Intuitive 名字必须读起来自然,尽可能接近常用语。
  • Descriptive 名称必须以最有效的方式反映它所做的/拥有的
/* Bad */
const a = 5 // "a" 不具有实际的表达性
const isPaginatable = a > 10 // 听起来不自然
const shouldPaginatize = a > 10 // 使用自己编造的单词

/* Good */
const postCount = 5
const hasPagination = postCount > 10
const shouldPaginate = postCount > 10 // alternatively

4. 避免缩写

不要使用收缩。它们只会降低代码的可读性。找到一个简短的、描述性的名称可能很难,但收缩并不是不这样做的借口。

/* Bad */
const onItmClk = () => {}

/* Good */
const onItemClick = () => {}

5. 避免上下文重复

名称不应与定义它的上下文重复。如果这不会降低其可读性,请始终从名称中删除上下文。

class MenuItem {
  /* 存在 上下文 MenuItem 应当删除 */
  handleMenuItemClick = (event) => { ... }

  /* 很好的看作了 `MenuItem.handleClick()` */
  handleClick = (event) => { ... }
}

6. 反映预期结果

名称应反映预期结果

/* Bad */
const isEnabled = itemCount > 3
return <Button disabled={!isEnabled} />

/* Good */
const isDisabled = itemCount <= 3
return <Button disabled={isDisabled} />

二, 命名函数

命名函数时可以遵循一个有用的模式。

1. A/HC/LC 模式

prefix? + action (A) + high context (HC) +   low context? (LC)
 前缀      动词/动作        强描述(主要内容)   低描述(辅助内容)

参照下表看看

Name Prefix Action (A) High context (HC) Low context (LC)
getUser get User
getUserMessages get User Messages
handleClickOutside handle Click Outside
shouldDisplayMessage should Display Message

注意: 上下文的顺序会影响一个变量的含义。例如,shouldUpdateComponent意味着你即将更新一个组件,而 shouldComponentUpdate 则告诉你该组件将自行更新,而你不过是控制它何时更新。换句话说,高上下文强调了一个变量的意义。

2. Action 行动

你的函数名称中的动词部分。最重要的部分,负责描述该函数的作用。

2.1 get

立即访问,获取数据(即内部数据的速记 getter)

function getFruitCount() {
 return this.fruits.length
}

2.2 set

以声明方式设置变量,将值 A 设置为值 B

let fruits = 0

function setFruits(nextFruits) {
 fruits = nextFruits
}

setFruits(5)
console.log(fruits) // 5

2.3 reset

将一个变量设置为其初始值或状态。

const initialFruits = 5
let fruits = initialFruits
setFruits(10)
console.log(fruits) // 10

function resetFruits() {
  fruits = initialFruits
}

resetFruits()
console.log(fruits) // 5

2.4 fetch

请求一些数据,这需要一些不确定的时间(即异步请求)。 个人觉得使用 request 也是可以的。

function fetchPosts(postCount) {
  return fetch('https://api.dev/posts', {...})
}

2.5 remove

从某处移除某项。

例如,如果你在搜索页面上有一个所选过滤器的集合,从集合中删除其中一个过滤器就是removeFilter,而不是deleteFilter(在英语中自然也是这样说的)。

function removeFilter(filterName, filters) {
  return filters.filter((name) => name !== filterName)
}

const selectedFilters = ['price', 'availability', 'size']
removeFilter('price', selectedFilters)

2.6 delete

从存在的领域中完全抹去一些东西。

想象一下,你是一个内容编辑,有那个臭名昭著的帖子,你想把它删掉。一旦你点击了一个闪亮的 “删除帖子 “按钮,CMS执行的是 deletePost 动作,而不是 removePost

function deletePost(id) {
  return database.find({ id }).delete()
}

2.7 compose

从现有的数据中创建新的数据。主要适用于字符串、对象或函数。

function composePageUrl(pageName, pageId) {
  return (pageName.toLowerCase() + '-' + pageId)
}

2.8 handle

处理一个动作。通常在命名回调方法时使用。

function handleLinkClick() {
  console.log('Clicked a link!')
}

link.addEventListener('click', handleLinkClick)

3. Context 内容

函数操作的上下文

一个函数通常是对某物的操作。重要的是要说明它的可操作域是什么,或者至少是一个预期的数据类型。

/* 一个通用的 过滤操作的函数 */
function filter(list, predicate) {
  return list.filter(predicate)
}

/* 准确地使用在获取最近帖子上操作的方法 */
function getRecentPosts(posts) {
  return filter(posts, (post) => post.date === Date.now())
}

4. Prefixes 前缀

前缀增强了变量的含义。它很少在函数名中使用。

4.1 is

描述了当前环境的一个特征或状态(通常是布尔值)。

const color = 'blue'
const isBlue = color === 'blue' // characteristic
const isPresent = true // state

if (isBlue && isPresent) {
  console.log('Blue is present!')
}

4.2 has

描述当前上下文是否拥有某个值或状态(通常是布尔值)

/* Bad */
const isProductsExist = productsCount > 0
const areProductsPresent = productsCount > 0

/* Good */
const hasProducts = productsCount > 0

4.3 should

反映了一个积极的条件语句(通常是布尔型)与某个行动的结合。

function shouldUpdateUrl(url, expectedUrl) {
  return url !== expectedUrl
}

4.4 max/min

代表一个最小或最大的值。在描述边界或限制时使用

/** * 车险随机数帖子 * max、min边界 */
function renderPosts(posts, minPosts, maxPosts) {
  return posts.slice(0, randomBetween(minPosts, maxPosts))
}

4.5 prev/next

表明变量在当前环境中的上一个或下一个状态。在描述状态转换时使用。

function fetchPosts() {
  const prevPosts = this.state.posts

  const fetchedPosts = fetch('...')
  const nextPosts = concat(prevPosts, fetchedPosts)

  this.setState({ posts: nextPosts })
}

5. 单数和复数 (Singular and Plurals)

像前缀一样,变量名可以做成单数或复数,这取决于它们是持有一个值还是多个值。

/* Bad */
const friends = 'Bob'
const friend = ['Bob', 'Tony', 'Tanya']

/* Good */
const friend = 'Bob'
const friends = ['Bob', 'Tony', 'Tanya']

翻译引用至: Github

今天的文章代码命名规范指引分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15513.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注