Иногда, когда я программирую, я обнаруживаю, что какая-то конкретная структура управления была бы мне очень полезна, но недоступна напрямую в моем языке программирования. Я думаю, что мое самое распространенное желание — это что-то вроде «разделить время» (я понятия не имею, как это назвать):
{
foo();
} split_while( condition ) {
bar();
}
Семантика этого кода будет заключаться в том, что foo()
всегда запускается, а затем проверяется условие. Если true, то запускается bar()
и мы возвращаемся к первому блоку (таким образом снова запускается foo()
и т. д.). Благодаря комментарию пользователя Reddit zxqdms я узнал, что Дональд Э. Кнут пишет об этой структуре в своей статье "Структурное программирование с go to
заявления" (см. стр. 279).
Какие альтернативные структуры управления, по вашему мнению, являются полезным способом организации вычислений?
Моя цель здесь — дать себе и другим новые способы мышления о структурировании кода, чтобы улучшить разбиение на фрагменты и рассуждения.
Примечание: я не спрашиваю о том, как обобщить все возможные управляющие структуры, будь то с помощью jne
, if
/goto
, макросов Лиспа, продолжений, монад, комбинаторов, кварков, или что-то еще. Я спрашиваю, какие специализации полезны при описании кода.
undo
предназначены только для примера, то то, что у вас есть, не очень альтернативная структура управления. Он называется обработка исключений и существует (хотя и не обязательно под этим названием) почти столько же, сколько и само программирование. Если вы действительно хотите, чтобыundo
были частью семантики, тогда это транзакция и не очень альтернатива. - person Jörg W Mittag   schedule 28.11.2010loop statement1; while!(condition); statement2; end;
- person Jordão   schedule 28.11.2010splitWhile
) может быть довольно легко реализована в Scala: paste.pocoo.org/show /297023 :-) - person missingfaktor   schedule 28.11.2010