Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
ufna |
5.10.2010, 9:51
Сообщение
#11
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 362 Регистрация: 24.5.2008 Из: Курган/СПб Пользователь №: 182 Спасибо сказали: 29 раз(а) Репутация: 5
|
Считаю все равно философию goto устаревшей и слишком узкой )
|
|
|
|
|
igor_bogomolov |
5.10.2010, 10:04
Сообщение
#12
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Цитата(ufna @ 5.10.2010, 10:51) Link Считаю все равно философию goto устаревшей и слишком узкой ) Рискну выложить на суд общественности такой код (написан не мной, но в проекте используется). Считаю использование goto в данном случае оправданным
|
|
|
|
|
Алексей1153 |
5.10.2010, 10:09
Сообщение
#13
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
не знаю, что делают forever и foreach
но ВСЕГДА можно обойтись без goto если foreach - это перебор, то проще сделать if(... find(...) )continue; соответственно, forever - заменить на while(1){} |
|
|
|
|
kwisp |
5.10.2010, 10:16
Сообщение
#14
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
igor_bogomolov,
я согласеня с Алексей1153, m_lsHosts, m_lsFolders - рискну предположить, что контейнеры, тогда циклы ни к чему тут goto даже всей своей сволочной натуры не показывает он заменяет continue и всё! читал у Лафоре и еще где-то что оправдать использование goto можно лишь при большушем уровне вложенности если требуется выйти на сразу несколько уровней вверх. Сам не пробовал и не собираюсь такого городить |
|
|
|
|
Алексей1153 |
5.10.2010, 10:24
Сообщение
#15
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Цитата(kwisp @ 5.10.2010, 13:16) Link если требуется выйти на сразу несколько уровней вверх. Сам не пробовал и не собираюсь такого городить такое встречается редковато, но выход я находил в выделении кода в функцию, из которой можно выйти return. Все нужные параметры передаются по ссылке - даже думать практически не надо, как это сделать |
|
|
|
|
igor_bogomolov |
5.10.2010, 10:24
Сообщение
#16
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Цитата(kwisp) тут goto даже всей своей сволочной натуры не показывает он заменяет continue и всё! continue здесь не подойдётАлгоритм использует последовательный перебор целых чисел начиная с нуля и проверяет его уникальность последовательным сравнением ключей (na->m_iSelfKey, fa->m_iSelfKey) в контейнерах объектов хостов (m_lsHosts) и папок (m_lsFolders). Если число уникально, то алгоритм останавливается. Цитата(Алексей1153) но ВСЕГДА можно обойтись без goto С этим я не спорю. Я думал у вас разговор о том, когда использование goto может быть оправданным. В выше приведенном примере оно мне кажется оправданным |
|
|
|
|
Алексей1153 |
5.10.2010, 10:25
Сообщение
#17
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Цитата(igor_bogomolov @ 5.10.2010, 13:24) Link В выше приведенном примере оно мне кажется оправданным а мне не кажется, а кроме того - сразу стало видно, что можно оптимизировать (ускорить) поиск |
|
|
|
|
kwisp |
5.10.2010, 10:30
Сообщение
#18
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(igor_bogomolov @ 5.10.2010, 11:24) Link continue здесь не подойдёт подойдёт, буду спорить. если убрать цикл foreach с заменой на find всё подходит великолепно какой тип контейнера используется? Цитата(Алексей1153 @ 5.10.2010, 11:25) Link Алгоритм использует последовательный перебор целых чисел начиная с нуля и проверяет его уникальность последовательным сравнением ключей (na->m_iSelfKey, fa->m_iSelfKey) в контейнерах объектов хостов (m_lsHosts) и папок (m_lsFolders). Если число уникально, то алгоритм останавливается. т.е. если числа нет в обоих контейнерах то останавливается. |
|
|
|
|
Sokoloff |
5.10.2010, 10:39
Сообщение
#19
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11
|
Вот так и знал, что начнется спор про goto, самого подмывало написать, но удержался. У человека же после ваших споров в голове каша будет.
QMainWindow, большинство современных авторов считают что goto вредно, потому что с его помощью легко наделать логических ошибок в коде. Иногда в отдельных случаях его применение дает выгоду, но это скорее исключение из правила. Поэтому на начальных этапах изучения языка считай что оператора goto нет. Со временем и опытом придет понимание где его можно использовать. |
|
|
|
|
igor_bogomolov |
5.10.2010, 10:45
Сообщение
#20
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Цитата(kwisp @ 5.10.2010, 11:27) Link подойдёт, буду спорить. Я говорю про конкретную реализацию алгоритма, описание которого привел после. Там continue не подойдетЦитата(kwisp @ 5.10.2010, 11:27) Link т.е. если числа нет в обоих контейнерах то останавливается. Ага. А если есть хоть в одном, выходит по goto и начинает поиск для следущего числаЦитата(kwisp @ 5.10.2010, 11:27) Link какой тип контейнера используется? QList<HostItem*> m_lsHosts;Цитата(kwisp @ 5.10.2010, 11:27) Link если убрать цикл foreach с заменой на find всё подходит великолепно Контейнер хранит указатели, поэтому qFind не подойдет. Представь что ты не можешь изменить HostItem и FolderItem. И не можешь использовать find. Попробуй изменить алгоритм только внутри функции HostGraph::createKey(). Сможешь написать его короче и красивее? Цитата(Sokoloff) QMainWindow, большинство современных авторов считают что goto вредно, потому что с его помощью легко наделать логических ошибок в коде. Иногда в отдельных случаях его применение дает выгоду, но это скорее исключение из правила. +500
Поэтому на начальных этапах изучения языка считай что оператора goto нет. Со временем и опытом придет понимание где его можно использовать. |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 7.1.2026, 1:00 |