Один пример, который я всегда пытаюсь сделать, это заменить сильно вложенные if, если это так (на самом деле это не слишком плохо, но я видел их на глубине до 8 или 9 уровней в дикой природе):
if (i == 1) {
// action 1
} else {
if (i == 2) {
// action 2
} else {
if (i == 3) {
// action 3
} else {
// action 4
}
}
}
с этим:
switch (i) {
case 1:
// action 1
break;
case 2:
// action 2
break;
case 3:
// action 3
break;
default:
// action 4
break;
}
Я также стараюсь, чтобы действия были как можно меньше (для этого лучше всего использовать вызовы функций), чтобы оператор switch был сжат (чтобы вам не пришлось идти на четыре страницы вперед, чтобы увидеть его конец).
Таблицы решений, я полагаю, просто устанавливают флаги, указывающие, какие действия необходимо предпринять позже. Раздел «позже» представляет собой простую последовательность действий на основе этих флагов. Я могу ошибаться (это будет не первый или последний раз: -).
Примером может быть (фаза установки флага может быть сложной, если она такова, поскольку ее действия очень просты):
switch (i) {
case 1:
outmsg = "no paper";
genmsg = true;
mailmsg = true;
phonemsg = false;
break;
case 2:
outmsg = "no ink";
genmsg = true;
mailmsg = true;
phonemsg = false;
break;
default:
outmsg = "unknown problem";
genmsg = true;
mailmsg = true;
phonemsg = true;
break;
}
if (genmsg)
// Send message to screen.
if (mailmsg)
// Send message to operators email address.
if (phonemsg)
// Hassle operators mobile phone.