Skip to content

函数相关

尽量使用足够长的能够描述函数功能的命名。通常函数都会执行一个明确的动作或意图,那么函数名就应该是能够描述这个意图一个动词或者表达语句,包含函数的参数命名也应该能清晰的表达具体参数的含义。

错误的示范

ts
function notif(user) {
  // implementation
}

正确的示范

ts
function notifyUser(emailAddress) {
  // implementation
}

避免函数有太多的形参。比较理想的情况下,一个函数的参数应该 <=2 个 。函数的参数越少,越容易测试。

错误的示范

ts
function getUsers(fields, fromDate, toDate) {
  // implementation
}

正确的示范

ts
function getUsers({ fields, fromDate, toDate }) {
  // implementation
}

getUsers({
  fields: ['name', 'surname', 'email'],
  fromDate: '2019-01-01',
  toDate: '2019-01-18',
})

如果函数的某个参数有默认值,那么应该使用新的参数默认值语法,而不是在函数里使用 || 来判断。

错误的示范

ts
function createShape(type) {
  const shapeType = type || 'cube'
  // ...
}

正确的示范

ts
function createShape(type = 'cube') {
  // ...
}

一个函数应该做一件事情。避免在一个函数里,实现多个动作。

错误的示范

ts
function notifyUsers(users) {
  users.forEach((user) => {
    const userRecord = database.lookup(user)
    if (userRecord.isVerified()) {
      notify(user)
    }
  })
}

正确的示范

ts
function notifyVerifiedUsers(users) {
  users.filter(isUserVerified).forEach(notify)
}

function isUserVerified(user) {
  const userRecord = database.lookup(user)
  return userRecord.isVerified()
}

不要在函数参数中,包括某些标记参数,通常这意味着你的函数实现了过多的逻辑。

错误的示范

ts
function createFile(name, isPublic) {
  if (isPublic) {
    fs.create(`./public/${name}`)
  } else {
    fs.create(name)
  }
}

正确的示范

ts
function createFile(name) {
  fs.create(name)
}

function createPublicFile(name) {
  createFile(`./public/${name}`)
}