对这个问题的抽象性质有所了解,但是虽然我正在考虑像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#等语言中,可以使用switch语句,省略通常的break语句来强制级联。但这种方法能否以实用的方式使用?
答案 0 :(得分: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;
// ........
}
答案 1 :(得分:1)
已经在论坛中有类似的东西 - > get-rid-of-ugly-if-statements
如果你认识波兰语,你可以观看演讲,关于'get-fid-of-if'youtube film from confitura (interesting part is from 25.20)
如果你不认识波兰语,作者说: a)最重要的是可读性(不工作,但可读代码比工作和不可读更好) b)什么代码(3个中的一个)是最好的?这取决于许多条件(例如,如果你和大学生一起工作,最好的很简单,如果你为图形引擎编写代码使用'数学')。
P.S。在c#if语句中,你不需要写'= true'
if ((checkbox1)&&(checkbox2)&&(checkbox3)
blah