Coding style 级联布尔逻辑

Coding style 级联布尔逻辑,coding-style,boolean,Coding Style,Boolean,对于这个问题的抽象性质,我有点怀疑,但尽管我正在考虑用java或c#之类的语言实现,但目前让我感到有点困扰的通常是这个概念 对于大多数语言,当使用布尔逻辑进行测试时,只有一个答案是有效的 if (fridgeDoorClosed !=true) closeFridge(); else eatSandwich(); 但是,当多条路径可能是正确的时,该怎么办?假设在网页上的表单中,用户使用复选框选择他/她希望看到的内容。要做到这一点,一个非常不雅观的方法是: if ((checkbox1==tru

对于这个问题的抽象性质,我有点怀疑,但尽管我正在考虑用java或c#之类的语言实现,但目前让我感到有点困扰的通常是这个概念

对于大多数语言,当使用布尔逻辑进行测试时,只有一个答案是有效的

if (fridgeDoorClosed !=true)
closeFridge();
else
eatSandwich();
但是,当多条路径可能是正确的时,该怎么办?假设在网页上的表单中,用户使用复选框选择他/她希望看到的内容。要做到这一点,一个非常不雅观的方法是:

if ((checkbox1==true)&&(checkbox2==true)&&(checkbox3==true))
blah
else if
((checkbox1==true)&&(checkbox2==true)&&(checkbox3==false))
blah
等等,当然要注意秩序


在java和c#等语言中,可以使用case switch语句,而不使用常用的break语句来强制级联。但是,这种方法是否可以实际使用呢

通常我会这样做:

if( checkbox1) {
  if( checkbox2) {
    if( checkbox3) {
      // all three
    }
    else {
      // a, b, not c
    }
  }
  // .......
}
但根据具体情况,您可以这样做:

boxes = (checkbox1?1:0)+(checkbox2?2:0)+(checkbox3?4:0);
switch(boxes) {
case 0: // no boxes
  break;
case 1: // box 1, not 2 or 3
  break;
case 2: // box 2, not 1 or 3
  break;
// ........
}

论坛中已经有类似的内容->

若你们懂波兰语,你们可以看一场关于“若得不到自由”的演讲

如果你不懂波兰语,作者会说: a) 最重要的是可读性(非工作,但可读代码比工作和不可读代码更好) b) 什么代码(3个代码中的一个)是最好的?这取决于许多条件(例如,如果你与大学生一起工作,最好的方法很简单,如果你为图形引擎编写代码,请使用“数学”)

p、 在c#if语句中,你不需要写“=true”

if ((checkbox1)&&(checkbox2)&&(checkbox3)
blah

我认为你们的开关断路器,包括所有可能的组合,似乎最有可能工作。嵌套的if语句很难获得100%的正确性。不幸的是,这仍然需要相当多的案例(3个选项10个可能的案例,4个选项17个,等等)