布尔变量命名技巧 - 更简洁的代码

2025-05-25

布尔变量命名技巧 - 更简洁的代码

原帖发布于michaelzanggl.com。订阅我的新闻通讯,不错过任何新内容。

有一个惯例,就是在布尔变量和函数名前加上“is”或“has”。你知道的,比如isLoggedInhasAccess或者类似的。

但在我的职业生涯中,我见过并写过一些代码,这些代码完全违背了这一约定。所以,让我们来看看一些极端情况。

正如所有规则一样,也有例外,遵循例外可能比强制执行惯例更好。

验证每个情况是否为真的布尔值

const XXX = users.every(user => user.isActive)
Enter fullscreen mode Exit fullscreen mode

仅当所有用户都处于活动状态时,XXX 才会为真。该如何命名这个变量?

多变的 有啥好处吗? 原因
用户是否已登录 🤨 语法错误
用户是否已登录 🤔 自定义前缀
isEveryUserLoggedIn 👍 适合Array.prototype.every
每个用户是否登录 🥰 比“每个”更自然(取决于)

布尔值,用于验证多种情况之一是否为真

const XXX = users.some(user => user.isActive)
Enter fullscreen mode Exit fullscreen mode

仅当至少有一个用户处于活动状态时,XXX 才会为真。

多变的 有什么好处吗? 原因
用户是否活跃 🙁 语法错误且含糊不清
至少有一个用户活跃 😵 太罗嗦了
是否一个用户活跃 🤥 谎言。这可能暗示只有一个用户活跃。避免混淆!
isSomeUserActive 👍 适合Array.prototype.some
isAnyUserActive 🤗 比“一些”更自然(取决于)

避免自定义前缀

我们之前已经在其中一个例子中介绍过这一点,但还有更多……

多变的 有啥好处吗? 原因
已付款 🤔 自定义前缀
账单已付 🤔 自定义前缀
已付款 😶 好吧,现在只是在开玩笑
已付费 😊

肯定名称

多变的 有啥好处吗? 原因
已禁用 🧐 消极的
不活跃 🤯 想象一下!isNotActive
hasNoBillingAddress 😞 无需说“不”
已启用/已激活/有账单地址 😁 像这样使用它!isActive来得到负数

当你有这样的情况时,负变量名的问题变得最明显

if (!account.isDisabled) {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

看看这读起来有多容易

if (account.isEnabled) {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

最后我们来看一个更复杂的例子。

const isAnyUserOffline = users.some(user => !user.isOnline)

if (isAnyUserOffline) {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

虽然这样可行,但由于some和的组合!,处理这段代码需要更多脑力。另一种方法是:

const isEveryUserOnline = users.every(user => user.isOnline)

if (!isEveryUserOnline) {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

它的行为是一样的,只要数据集足够小,我就不会担心对性能的小影响。


我确信我遗漏了很多,但我认为这些是一些更常见的情况。

如果这篇文章对您有帮助,我这里还有更多关于简化编写软件的提示

文章来源:https://dev.to/michi/tips-on-naming-boolean-variables-cleaner-code-35ig
PREV
撤消 Git 中的更改 - git checkout、stash、reset、clean、revert、rebase -i、amend 的备忘单目录
NEXT
学习Web开发时要完成的项目