Appearance
函数相关
尽量使用足够长的能够描述函数功能的命名。通常函数都会执行一个明确的动作或意图,那么函数名就应该是能够描述这个意图一个动词或者表达语句,包含函数的参数命名也应该能清晰的表达具体参数的含义。
错误的示范
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}`)
}