Предположим, у меня есть несколько шагов, например, во время установки программного обеспечения.Любая альтернатива обратным вызовам для программирования пользовательского интерфейса?
Каждый шаг отображает текстовое поле и ждет, пока пользователь нажмет кнопку «Далее».
Стандартный способ сделать это, чтобы иметь обратный вызов, как это:
process
{
Dialog1() // Will call callback2 when closed
}
callback2()
{
Dialog2() // Will call callback3 when closed
}
callbak3()
{
Dialog3() // Will call callback4 when closed
}
Этот метод делает код совершенно нечитаемым, когда есть много шагов, как вы должны разделяй вы обрабатываете в каждый последующий callback (не говоря уже о сохранении контекста от одного к другому).
Что было бы проще для чтения? В идеале этот процесс должен читаться как этого:
process()
{
Dialog1()
callback1() // stop method until closed
Dialog2()
callback2() // stop method until closed
Dialog3()
callback3() // stop method until closed
}
Проблема с этим состоит в том, что вы не можете остановить поток пользовательского интерфейса. Любая идея или работа вокруг были бы очень оценены.
PS: это как работать в C или Objective C
ОТВЕТ
Так после того, как обнаружили Сопрограммы благодаря Мартину B я нашел эту страницу: https://stackoverflow.com/posts/4746722/edit и в конечном итоге с помощью этого кода:
define coRoutineBegin static int state=0; switch(state) { case 0:
define yield do { state=__LINE__; return;
case __LINE__:; } while (0);
define coRoutineEnd }
void process()
{
coRoutineBegin
Dialog1()
yield
Dialog2()
yield
Dialog3()
yield
Dialog4()
yield
coRoutineEnd
}
Ненавижу C за отсутствие функциональных конструкций. Это может быть прекрасно выражено в функциональных языках (например.javascript) используя * продолжение *. –