Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.63.87] |
|
Страницы: (32) « Первая ... 16 17 [18] 19 20 ... 31 32 ( Перейти к последнему сообщению ) |
Сообщ.
#256
,
|
|
|
Цитата Serafim @ В плюсах тогда не было лямбд с замыканиями, а выносить в отдельную функцию плохо, так как нет доступа к локальным переменным. Короче FUUUUUUUUUUUUUUU! Например вот это приводилось в пример: goto vs break & continue (сообщение #3188868) Это ради того, чтобы не выносить метку в отдельную функцию или на худой конец замыкание, т.е. ни разу не оправдание сего пагубного поступка, а ведь ещё г-н Макконнел говорил.... |
Сообщ.
#257
,
|
|
|
Цитата Serafim @ тем более любой алгоритм можно без goto реализовать, более чище и понятнее, чем с ним. В этой теме уже приводился алгоритм, который без goto менее нагляден |
Сообщ.
#258
,
|
|
|
Serafim, ты пример Qraizer'а видел? Покажи его вариант, который был бы лучше варианта с goto. Там не выход из циклов, там вход
Вот небольшое резюме разных вариантов: Цитата D_KEY @ Пока получается что-то вроде того: int i = 0, j = 0, k = 0; if (restore(&i, &j, &k)) goto resume; for(i = 0; i < 10; ++i) { for (j = i; j < 10; ++j) { for(k = j; k < 10; ++k) { resume: // ... } } } vs int i = 0, j = 0, k = 0; restore(&i, &j, &k); for(; i < 10; ++i, j = i, k = j) { for (; j < 10; ++j, k = j) { for(; k < 10; ++k) { // ... } } } vs int init_i = 0, init_j = 0, init_k = 0; bool is_init = restore(&init_i, &init_j, &init_k); for(int i = is_init ? init_i : 0; i < 10; ++i) { for (int j = is_init ? init_j : i; j < 10; ++j) { for(int k = is_init ? init_k : j; k < 10; ++k) { // ... } } } Мне кажется, что вариант с goto понятнее... Хотя второй тоже неплох, на мой взгляд. |
Сообщ.
#259
,
|
|
|
Цитата OpenGL @ В этой теме уже приводился алгоритм, который без goto менее нагляден акстись, тут 18 страниц Добавлено Цитата applegame @ В плюсах тогда не было лямбд с замыканиями, а выносить в отдельную функцию плохо, так как нет доступа к локальным переменным. Короче FUUUUUUUUUUUUUUU! передать в качестве аргументов не позволяет религия? Добавлено как бы protected\private методы и существуют для того, чтоб не превращать методы в километровый склад кода Цитата D_KEY @ Покажи его вариант, который был бы лучше варианта с goto мне все три варианта понятны, ибо смысла в них нет, достаточно одного цикла от 0 до 10 * 10 * 10 Добавлено Не, не 10*10*10, там стоит инициализация не только нулём. Всё равно один фиг, проще было бы одним циклом фигню несу |
Сообщ.
#260
,
|
|
|
Цитата Serafim @ Так вам и надо, лузеры! PHP Fatal error: 'goto' into loop or switch statement is disallowed |
Сообщ.
#261
,
|
|
|
во, теперь точно рабочий вариант на корутинах и лямбдах:
deleted Добавлено или не, блин, опять фейл Добавлено щаща, подождите, я докажу, что goto зло |
Сообщ.
#262
,
|
|
|
Цитата Serafim @ Доказательства бывают только в математике, а в программирование внесён огромный пласт культуры=искусства, посему у вас не получится. Но всё же подождём! подождите, я докажу, что goto зло |
Сообщ.
#263
,
|
|
|
у меня лучше второго варианта не получается =(
|
Сообщ.
#264
,
|
|
|
По моему, второй вариант и так лучше. Наглядность не страдает, а строк кода даже меньше.
|
Сообщ.
#265
,
|
|
|
Лучше с goto, потому что пишется за три секунды и работает без отладки. При этом прекрасно понятен. Что ещё нужно-то?
|
Сообщ.
#266
,
|
|
|
Не вижу принципиальной разницы со вторым вариантом. Почему его дольше отлаживать или писать? Принцип-то один и тот же. Третий - да, смотрится страшновато, но имхо, он просто неудачный вариант второго.
Не являюсь фанатичным противником goto, если что. Просто как-то так получается, что он и не пригождается. Разве что в генерённом коде может быть полезно. И приведённый пример совсем не убеждает, но подозреваю, что во мнении мы не сойдёмся. Кстати, в расте goto нет (именованные break/continue имеются). |
Сообщ.
#267
,
|
|
|
Допускаю такую канитель, хоть самому никогда и не попадалось такое писать:
int myFunc(...) { int i,j=-1,k; // ещё вагоны переменных float p,q,r; // тело ниже: for( i=0; i<10; i++) { ... if( A ) // вызов длинной и сложной функции { goto Label_ФункцияЯкобы; Label_Возврат1:; } } ... // правка вагона переменных for( j=0; j<100; j++) { ... if( B ) // вызов длинной и сложной функции { goto Label_ФункцияЯкобы; Label_Возврат2:; } } ... // правка2 вагона переменных return 0; Label_ФункцияЯкобы: ... // сложный кусок, очень нуждающийся в вагоне переменных из этой функции if( j<0 ) goto Label_Возврат1; goto Label_Возврат2; } |
Сообщ.
#268
,
|
|
|
А я на практике этот код рожал, DarkEld3r. Пока допёр до структурного варианта, прошло три итерации правки сырцов и отладки. Вопрос: ну и нахрена было? И это я ещё не спрашиваю о стоимости структурного решения в единицах производительности по сравнению с goto. Предполагается-то ведь, что прерывание исполнения и сохранение состояние с последующим восстановлением состояния и продолжением исполнения суть очень редкая операция. Зачем делать лишние движения на каждой итерации ради исчезающе малого процента ситуаций, их обосновывающих?
Ну нет, Славян, вот как раз это я бы перепроектировал, тут с передачами управления полная ахинея. |
Сообщ.
#269
,
|
|
|
Цитата Qraizer @ А мне показалось, что всё довольно прозрачно. вот как раз это я бы перепроектировал, тут с передачами управления полная ахинея. |
Сообщ.
#270
,
|
|
|
Когда написано, да.
|