布尔变量命名技巧 - 更简洁的代码
原帖发布于michaelzanggl.com。订阅我的新闻通讯,不错过任何新内容。
有一个惯例,就是在布尔变量和函数名前加上“is”或“has”。你知道的,比如isLoggedIn
,hasAccess
或者类似的。
但在我的职业生涯中,我见过并写过一些代码,这些代码完全违背了这一约定。所以,让我们来看看一些极端情况。
正如所有规则一样,也有例外,遵循例外可能比强制执行惯例更好。
验证每个情况是否为真的布尔值
const XXX = users.every(user => user.isActive)
仅当所有用户都处于活动状态时,XXX 才会为真。该如何命名这个变量?
多变的 | 有啥好处吗? | 原因 |
---|---|---|
用户是否已登录 | 🤨 | 语法错误 |
用户是否已登录 | 🤔 | 自定义前缀 |
isEveryUserLoggedIn | 👍 | 适合Array.prototype.every |
每个用户是否登录 | 🥰 | 比“每个”更自然(取决于) |
布尔值,用于验证多种情况之一是否为真
const XXX = users.some(user => user.isActive)
仅当至少有一个用户处于活动状态时,XXX 才会为真。
多变的 | 有什么好处吗? | 原因 |
---|---|---|
用户是否活跃 | 🙁 | 语法错误且含糊不清 |
至少有一个用户活跃 | 😵 | 太罗嗦了 |
是否一个用户活跃 | 🤥 | 谎言。这可能暗示只有一个用户活跃。避免混淆! |
isSomeUserActive | 👍 | 适合Array.prototype.some |
isAnyUserActive | 🤗 | 比“一些”更自然(取决于) |
避免自定义前缀
我们之前已经在其中一个例子中介绍过这一点,但还有更多……
多变的 | 有啥好处吗? | 原因 |
---|---|---|
已付款 | 🤔 | 自定义前缀 |
账单已付 | 🤔 | 自定义前缀 |
已付款 | 😶 | 好吧,我现在只是在开玩笑 |
已付费 | 😊 |
肯定名称
多变的 | 有啥好处吗? | 原因 |
---|---|---|
已禁用 | 🧐 | 消极的 |
不活跃 | 🤯 | 想象一下!isNotActive |
hasNoBillingAddress | 😞 | 无需说“不” |
已启用/已激活/有账单地址 | 😁 | 像这样使用它!isActive 来得到负数 |
当你有这样的情况时,负变量名的问题变得最明显
if (!account.isDisabled) {
// ...
}
看看这读起来有多容易
if (account.isEnabled) {
// ...
}
最后我们来看一个更复杂的例子。
const isAnyUserOffline = users.some(user => !user.isOnline)
if (isAnyUserOffline) {
// ...
}
虽然这样可行,但由于some
和的组合!
,处理这段代码需要更多脑力。另一种方法是:
const isEveryUserOnline = users.every(user => user.isOnline)
if (!isEveryUserOnline) {
// ...
}
它的行为是一样的,只要数据集足够小,我就不会担心对性能的小影响。
我确信我遗漏了很多,但我认为这些是一些更常见的情况。
如果这篇文章对您有帮助,我这里还有更多关于简化编写软件的提示。
文章来源:https://dev.to/michi/tips-on-naming-boolean-variables-cleaner-code-35ig