Чел любит goto, но ему запретили их использовать, потому он изнасиловал switch. :-)))) Табу на goto касается именно читабельности программ, вышеприведённый код действительно сложно читать. Единственно приемлимым случаем его (goto) использования можно считать "сбор" всех путей выполнения в одну точку в пределах функции, например, переход на обработчик ошибок в её хвосте.
> Я лично о возможности такой конструкции не знал, остальные > сотрудники тоже. Оригинальный switch содержал десяток > кейсов в таком стиле.
switch это фактически просто goto, а case - метка для этого goto. Можно вставлять в циклы, уловия и пр.. Все тело switch-а линейно (поэтому надо делать break-и, если не хочешь провалиться в следующий case).
Вот только сотрудника надо бы лишить премии за такое. Нельзя было сделать if (x) {doFirst(); break;} с "проваливанием" в case 2 по !x ?
Такими "оптимизациями" обычно любят заниматься недавние школьники.
Ну это все на самом деле происходило при обработке нажатия...26.08.09 02:00 Автор: Heller <Heller> Статус: Elderman
> Вот только сотрудника надо бы лишить премии за такое. > Нельзя было сделать if (x) {doFirst(); break;} с > "проваливанием" в case 2 по !x ? Ну это все на самом деле происходило при обработке нажатия кнопок в диалоге.
> > Такими "оптимизациями" обычно любят заниматься недавние > школьники.
int n=(count+7)/8;
switch(count%8){
case 0: do{ *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
}while( --n >0);
}
---
Хотя это практически классика (http://en.wikipedia.org/wiki/Duff%27s_device), дающая какой-то выигрыш в скорости, в других случаях за такой код надо убивать мучительной смертью.
Прикольно, а почему кусок программного кода назвали "устройством", "device"? ;)07.09.09 12:56 Автор: HandleX <Александр М.> Статус: The Elderman