вы можете сделать некоторые предположения относительно х, у, г, д? e.G. только один из них может быть правдой. Чем вы могли видеть его в качестве государства
enum State {
X{
void doSomething(){
doItTheXWay();
}
},
Y{
void doSomething(){
doItTheYWay();
}
},
Z{
void doSomething(){
doItTheZWay();
}
},
Q{
void doSomething(){
doItTheQWay();
}
};
void doSomething(){
}
}
и в вашем коде, где вы использовали, если заявления
можно присвоить состояние и просто делать правильные вещи
State state = getAState();
state.doSomething();
В случае, если вы не нравится enums State может быть интерфейсом, а X to Q может реализовывать классы. Преимущества в этом случае в многократном использовании той же конструкции if else. Скажем, некоторые codelines позже вы бы начать с
if(x)
do_the_next_thing_with_X();
...
или вы могли бы просто расширить перечисление с помощью другой функции и сделать один единственный звонок
state.doTheNextThing();
@Thirler Хм, это будет поражение цели короткого замыкания оценка. Я думаю, что в среднем, предполагая равную вероятность и временную сложность x, y, z и q, это будет повышение производительности. Но что, если вероятность z равна 50% и занимает мало обработки, а вероятность q равна 1%, и она занимает 95% от мощности обработки? Посмотрите, как микро-оптимизация может привести к неприятностям без надлежащих показателей? –
Да, нам нужно использовать не более одной переменной, чтобы сделать это. – Halo
@Tim Вам нужны чрезвычайно длинные условия (или код, который выполняется миллионы раз), чтобы это было утечкой производительности.Я, конечно, не оптимизирую (вопрос об этом не говорит), я предлагаю улучшить ремонтопригодность. Если производительность важна, вам необходимо буферизовать результат вычисления прозрачно (скрыть его за функцией, которая сохраняет результат). Обратите внимание, что данный пример дважды выполняет некоторые условия. Но хорошим правилом является не оптимизация вообще, пока вы не увидите, что для выполнения требуется значительное количество времени. – Thirler