0

对问题的抽象性质的应用程序,但尽管我正在考虑用 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 语句来强制级联。但是这样的方法可以实际使用吗?

4

2 回答 2

1

论坛中已经有类似的东西-> get-rid-of-ugly-if-statements

如果您了解波兰语,您可以观看关于confitura 的 'get-fid-of-if' youtube 电影的介绍(有趣的部分来自 25.20)

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

ps 在 c# if 语句中,你不需要写 '=true'

if ((checkbox1)&&(checkbox2)&&(checkbox3)
blah
于 2013-07-14T23:38:22.183 回答
1

通常我会做这样的事情:

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;
// ........
}
于 2013-07-14T23:22:51.857 回答