如何命名互斥选项的布尔变量?明确True/False对应选项
完全懂你的痛点——那种模糊的lChickenOrFish式命名,真的会让后续看代码的人(包括几周后的你自己)挠头半天,必须翻实现才能搞懂True到底对应选鸡肉还是鱼肉。针对这种二选一的互斥场景,核心思路就是让变量名直接回答“是否选中了某一个明确选项”,而不是只告诉你有两个选项可选。
给你几个具体的命名方案,按需选用:
直接指向选中的目标:
最直观的方式就是用isChickenSelected,或者更简洁的selectedChicken(如果上下文已经明确是选餐这类场景)。看到这个变量名,瞬间就能明白True代表选了鸡肉,False自然就是选了鱼肉(毕竟是互斥的)。如果其中一个选项是默认值,这种命名会更合适——比如默认选鱼肉,那isChickenSelected为True就清晰表示“偏离默认选了鸡肉”。用“偏好/类型”强化语义:
如果变量代表的是用户偏好或者固定类型,而非临时选择,可以用prefersChicken或者mealTypeIsChicken。这种命名能更明确变量的用途,比如在用户个人设置里,prefersChicken一看就知道是用户的长期饮食偏好设置。避坑提醒:别用模糊的“或”命名:
像lChickenOrFish这种命名的最大问题就是没有指向性,加上前缀l(哪怕是局部变量标识)也没任何帮助。这种模糊的“XOrY”格式只会增加认知负担,能避开就避开。
另外还有个进阶小技巧:如果未来有可能扩展选项(比如以后要加牛肉选项),那不如直接用枚举类型,比如enum MealOption { Chicken, Fish },这样语义绝对清晰,后续扩展也更方便。但如果确定永远是二选一,布尔变量加清晰命名就足够高效了。
内容的提问来源于stack exchange,提问作者Tesset

