命名一个布尔字段

时间:2011-11-04 08:55:00

标签: naming-conventions

我为医疗环境建立了员工计划系统。通常,员工忙于患者护理。有时员工会忙于非病人护理,我喜欢在我的数据库中对这种情况进行建模。我的第一个想法是添加一个像

这样的字段
boolean noPatientCare default false

但后来我想起了我如何讨厌他们中的否定信息,比如“你确定你不想保存这个文件吗?”并想知道这样做是否更好

boolean patientCare default true

我应该如何命名我的新专栏?是否有任何理论背景或仅仅是品味问题?

4 个答案:

答案 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)。之后阅读这段代码是一个令人生畏的大脑扭转者。如果可以,请避免使用它。

但是,在某些情况下,行话和/或环境可能会指定一个特定的单词,并且将其更改为非否定形式可能实际上使您的代码更难理解。