2013-07-14 2 views
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 

и так далее, будучи осторожным с тем, конечно.

В таких языках, как операторы switch java и C# case, можно использовать обычные инструкции break для принудительного каскада. Но можно ли использовать такой метод на практике?

ответ

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; 
// ........ 
} 
+0

Я думаю, что ваш перерыв с случаями, охватывающий все возможные комбинации, скорее всего, сработает. Вложенные операторы if могут быть сложными, чтобы получить 100% правильную. К сожалению, это все еще требует довольно много случаев (10 возможных случаев для 3 вариантов 17 для 4 и т. Д.), – Stumbler

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 
Смежные вопросы