我为医疗环境建立了员工计划系统。通常,员工忙于患者护理。有时员工会忙于非病人护理,我喜欢在我的数据库中对这种情况进行建模。我的第一个想法是添加一个像
这样的字段boolean noPatientCare default false
但后来我想起了我如何讨厌他们中的否定信息,比如“你确定你不想保存这个文件吗?”并想知道这样做是否更好
boolean patientCare default true
我应该如何命名我的新专栏?是否有任何理论背景或仅仅是品味问题?
答案 0 :(得分:2)
区分布尔0/1(护理/无护理)和双状态A / B(病人护理/非病人护理)。
内在的否定是不好的。在没有任何内容的情况下建议否定的命名约定更糟糕。所以绝对不是noPatientCare
,因为这表明患者护理占用或者无人居住。使用nonpatientCare
意味着不同的职业。
但是,如果这是一个三态patientCare
/ nonpatientCare
/ unoccupied
(或其他),则使用枚举,而不是bool并为通用属性命名字段(careOccupation) ,不是其中一个值。如果它是一个严格的双态,没有严重的理由说明为什么它不能“通常是真的”boolean patientCare default true
。
在选择bool而不是enum之前,甚至还要三思而后行。您是否完全确定不会有新的单独类别,或者其中一个类别不会拆分为更窄的子类别?当“真实”和“错误”之间的区别不明显时,绝对值得为字段和描述性值名称选择集体名称,而不是选择bool。
我的工作示例:workMode == NIGHT_MODE或workMode == DAY_MODE,vs bool dayWorkMode。使用if(!dayWorkMode)
进行夜间操作的特殊例外编码会感觉很尴尬,因为夜间时间不是缺乏条件,只是一个不同的条件。
答案 1 :(得分:1)
这是品味和可读性的问题。
你可以找到另一个词或概念。例如,也许可以说不与病人一起工作的医务人员从事行政或其他任务。
答案 2 :(得分:1)
如果变量意味着积极的主张,而不是他们的否定,我发现条件和逻辑陈述更容易阅读和理解。考虑:
if (patientCare || somethingOther) println("Employee is busy with patient care or something other)
与
if (!noPatientCare || somethingOther) ...
答案 3 :(得分:1)
我通常试图避免布尔变量名称的否定。
我曾经用这样的方法写了违反这个规则的好例子:
void frobnicate(boolean negate);
这个论点实际上被称为negate
,如果你想真正“否定”你写的frobnicate
电话frobnicate(true)
。 “肯定”frobnicate
来电是frobnicate(false)
。之后阅读这段代码是一个令人生畏的大脑扭转者。如果可以,请避免使用它。
但是,在某些情况下,行话和/或环境可能会指定一个特定的单词,并且将其更改为非否定形式可能实际上使您的代码更难理解。