Ключевые слова Qt/C++, Где посмотреть? |
Здравствуйте, гость ( Вход | Регистрация )
Ключевые слова Qt/C++, Где посмотреть? |
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 |
Считаю все равно философию goto устаревшей и слишком узкой ) Рискну выложить на суд общественности такой код (написан не мной, но в проекте используется). Считаю использование goto в данном случае оправданным
|
|
|
Алексей1153 |
5.10.2010, 10:09
Сообщение
#13
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 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
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
если требуется выйти на сразу несколько уровней вверх. Сам не пробовал и не собираюсь такого городить такое встречается редковато, но выход я находил в выделении кода в функцию, из которой можно выйти 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
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
kwisp |
5.10.2010, 10:30
Сообщение
#18
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
continue здесь не подойдёт подойдёт, буду спорить. если убрать цикл foreach с заменой на find всё подходит великолепно какой тип контейнера используется? Алгоритм использует последовательный перебор целых чисел начиная с нуля и проверяет его уникальность последовательным сравнением ключей (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 |
подойдёт, буду спорить. Я говорю про конкретную реализацию алгоритма, описание которого привел после. Там continue не подойдетт.е. если числа нет в обоих контейнерах то останавливается. Ага. А если есть хоть в одном, выходит по goto и начинает поиск для следущего числакакой тип контейнера используется? QList<HostItem*> m_lsHosts;если убрать цикл foreach с заменой на find всё подходит великолепно Контейнер хранит указатели, поэтому qFind не подойдет. Представь что ты не можешь изменить HostItem и FolderItem. И не можешь использовать find. Попробуй изменить алгоритм только внутри функции HostGraph::createKey(). Сможешь написать его короче и красивее? Я только это имел в виду Цитата(Sokoloff) QMainWindow, большинство современных авторов считают что goto вредно, потому что с его помощью легко наделать логических ошибок в коде. Иногда в отдельных случаях его применение дает выгоду, но это скорее исключение из правила. +500
Поэтому на начальных этапах изучения языка считай что оператора goto нет. Со временем и опытом придет понимание где его можно использовать. |
|
|
Текстовая версия | Сейчас: 22.12.2024, 20:16 |