Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Внизкак-то видел на этом форуме... Найти похожие ветки
← →
kai © (2004-12-13 15:04) [0]...ветки, в которых написано, что использование Exit в функциях и break в циклах - признак дурного тона. Почему-то не согласен с этим, например, пишу:
[code]
procedure ....
...какой-то код
try
if ...какой-то код then
Exit;
...какой-то код
finally
...какой-то код, необходимый для корректного завершения
end;
end;
[/code]
где дурной тон?
← →
Cobalt © (2004-12-13 15:08) [1]А я тут слышал от кого-то, что Goto - дурной тон.
И ничего.
А Васька слушает да ест ;)
← →
kai © (2004-12-13 15:11) [2]Cobalt © (13.12.04 15:08) [1]
а goto разве не дурной?
← →
Игорь Шевченко © (2004-12-13 15:15) [3]
> Почему-то не согласен с этим
Borland тоже не согласен.
← →
KSergey © (2004-12-13 15:19) [4]> [2] kai © (13.12.04 15:11)
> Cobalt © (13.12.04 15:08) [1]
> а goto разве не дурной?
Нет.
"Каждый фрукт, будучи..." - и далее по тексту.
> kai © (13.12.04 15:04)
> в которых написано, что использование Exit в функциях
> и break в циклах - признак дурного тона.
Ну и не бери в голову. Там, увы, так и не удалось получить от автора полного ответа. Да еще пришел кто-то из мастеров (прошу прощения, забыл) - и все опошлил грамотной расстановкой акцентов в ассемблерном коде... ;) Более ответов автора я уже так и не услышал. Да и зачем? Теологические методы в этих вопросах - неприменимы...
← →
марсианин © (2004-12-13 15:24) [5]
> где дурной тон?
exit в блоке try-finally. работать, конечно, будет, но лучше избегать.. благо это не сложно
← →
kai © (2004-12-13 15:36) [6]марсианин © (13.12.04 15:24) [5]
почему? если не сложно - объясните?
← →
марсианин © (2004-12-13 15:50) [7]
> почему? если не сложно - объясните?
ИМХО, try предназначен для обработки исключений, и, чтоб сработал finally, компилятор должен сделать финт ушами.. там наверняка будет не совсем эффективный код. могу ошибаться, т.к. в листинги ассемблерные не заглядывал.. короче, это тот самый случай, когда фрукт не совсем полезен..
← →
kai © (2004-12-13 16:03) [8]марсианин © (13.12.04 15:50) [7]
если так рассуждать, то ООП вообще неэффективно по оптимальности кода.
← →
Piter © (2004-12-13 16:03) [9]марсианин © (13.12.04 15:24) [5]
exit в блоке try-finally. работать, конечно, будет, но лучше избегать.. благо это не сложно
а что такого в Exit в блоке try..finally?
Finally все равно будет выполнен...
← →
Ihor Osov'yak © (2004-12-13 16:32) [10]2 [5] марсианин © (13.12.04 15:24)
Не согласен.. Вообще-то на марсе - не знаю, а в наших краях - вполне нормально воспринимается..
← →
Igorek © (2004-12-13 16:54) [11]kai © (13.12.04 15:04)
Насчет Exit. Типичный случай применения - начало процедуры записи свойства if fValue = aValue then Exit. Позволяет избежать лишней вложенности if fValue <> aValue then begin ...{уже на один уровень глубже} end. А таких предусловий может быть несколько.
Насчет break - вообще глупо мне кажется. Как иначе цикл завершить? Напр. найти в массиве первое нечетно число. Переменную цикла в теле менять - еще более дурной тон. Можно переписать на while do или repeat until, то логика будет не так очевидна. Большинству.
Хотя на вкус и цвет... Кому-то и код автосхемы понравится может.
← →
Piter © (2004-12-13 17:18) [12]Igorek © (13.12.04 16:54) [11]
Переменную цикла в теле менять - еще более дурной тон
это не дурной тон, так как сделать этого просто нельзя
← →
Gero © (2004-12-13 17:39) [13]Вот та ветка:
http://delphimaster.net/view/1-1100705690/
К сожалению, уже ушла в архив.
← →
Vasya.ru © (2004-12-13 18:34) [14]Переменную цикла в теле менять - еще более дурной тон
неверно принцим работы for а представляешь
← →
марсианин © (2004-12-13 19:03) [15]
> [10] Ihor Osov"yak © (13.12.04 16:32)
а как же насчет локальной раскрутки?
тот же Рихтер делать этого очень не рекомендует ( см.ГЛАВА 23 Обработчики завершения-> И еще о блоке finally )
хотя, конечно, там речь идет о SEH. не очень логично распространять это на другие обработчики исключений ( в делфи, в стандартном С++), но раз в 1 месте возможны проблемы, наверное, стоит избегать их и в других местах?
← →
begin...end © (2004-12-13 19:05) [16]> [12] Piter © (13.12.04 17:18)
> это не дурной тон, так как сделать этого просто нельзя
Уточнение: начиная с Delphi 2.
← →
SergP © (2004-12-13 23:29) [17]
> Хотя на вкус и цвет... Кому-то и код автосхемы понравится
> может.
Бедный DmitryO. Опять на него нападаете...
Кстати а ты видел код этой автосхемы?
← →
Knight © (2004-12-14 00:35) [18]Нам это объясняли так, что Goto, break и др. exit"ы в Паскале, нарушают один из принципов структурного программирования... "блок должен иметь один вход и один выход"... после чего за их использование гнали в шею с лабораторных... :)
← →
Igorek © (2004-12-14 00:59) [19]SergP © (13.12.04 23:29) [17]
> Бедный DmitryO. Опять на него нападаете...
Нет, нет! Ни в коем случае! Наоборот я лично к Диме отношусь с достаточным уважением.
> Кстати а ты видел код этой автосхемы?
Да.
← →
Alex Konshin © (2004-12-14 01:02) [20]Goto, Break и Exit не любят теоретики, им видите-ли трудно доказывать правильность программ. А вы знаете хоть одну программу на Delphi для которых доказывалась их правильность? Ну так и нафига придумывать себе препятствия, чтоб потом героически их предолевать? Если хорошо понимаешь то, что делаешь, то можешь приминять все, что считаешь нужным. Теологи от программирования пусть ищут себе более полезное применение.
Насчет finally - да, действительно там прилагаются некие усилия для его реализации, но на мой взгляд в данном случае надежность превыше всего. Есть такая вещь, как "защита от дурака" - когда делаешь проверки всех входных параметров, возвращаемые из других функций результаты и всегда предполагаешь самый худший вариант. Вот в этом try finally и try except чрезвычайно полезны. Если же не использовать такой подход к программированию, то получаем программы, которые падают от косого взгляда, и шаг в сторону от предполагаемого "программистом" пути рассматривается как попытка к бегству и карается расстрелом на месте.
← →
KSergey © (2004-12-14 07:59) [21]По поводу всех эти Break вспоминается мне все время такой случай.
Quark XDK, примеры.
В одном из них встречаю конструкцию такого вида (было на Си, ну да не суть):while (TRUE) {
....
if (...) break;
....
if (...) break;
....
break;
}
Ну наверчено там было лихо, я эту конструкцию не сразу усек. Все башку ломал: нафиг цикл, вроде всегда из него на первой же итерации выходим... Искал условия когда же не выйдем на первой же итерации - никак... Потом таки дошло: этим гадам GOTO было написать противно... Типа приверженцы структурного программизма и все такое...
← →
Кудесник © (2004-12-14 11:08) [22]
> KSergey © (14.12.04 07:59) [21]
Си - это отдельная тема... там тот же break является, для некоторых конструкций, обязательным элементом... но когда его начинают необдуманно совать везде где не попадя... программы тоже начинают падать при любом изменении погоды на Марсе... %)
Хотя, как было сказано выше, каждому слову есть время и место... кроме goto, употребления которого в Паскале действительно следует избегать... конечно, имхо :)
← →
DiamondShark © (2004-12-14 11:40) [23]Удалено модератором
← →
pasha_golub © (2004-12-14 11:51) [24]DiamondShark © (14.12.04 11:40) [23]
А пионер, увидев массив, сначала радостно напишет цикл for, потом начнёт мучительно думать, как из него выйти, а потом ещё более мучительно думать, как он будет выкручиваться из ситуации, когда в массиве вообще нет элементов, удовлетворяющих условию поиска. Вероятно, что он даже напишет в форум о "глюке компилятора".
Абсолютно согласен. Я вообще не признаю методику, в которой людям сначала рассказывают о циклах for, а уж потом о while&repeat. Ведь первый, по сути, подвид второго.
← →
Piter © (2004-12-14 12:19) [25]DiamondShark © (14.12.04 11:40) [23]
если не ошибаюсь, по условию надо было найти ПЕРВОЕ нечетное число...
Я не вижу другого пути, кроме Break. Ведь если это число найдено - ЗАЧЕМ продолжать поиск, особенно учитывая то, что массив может быть из 1000 элементов, а нужный элемент мы нашли уже на первых 10 итерациях?
Ну или вводить какую-нибудь дополнительную переменную, типа Flag: boolean, только нафига?
← →
VictorT © (2004-12-14 12:25) [26]Я часто использую как break, так и continue. В принципе можно было бы и обойтись без них, но тогда было бы больше кода.
← →
DiamondShark © (2004-12-14 12:30) [27]
> Piter © (14.12.04 12:19) [25]
> DiamondShark © (14.12.04 11:40) [23]
>
> если не ошибаюсь, по условию надо было найти ПЕРВОЕ нечетное
> число...
А там какое находится? Десятое?
← →
ламер © (2004-12-14 13:41) [28]за последние лет 5-6 ни разу не воспользовался оператором goto. причём никакого ущерба эффективности кода это не нанесло. а break и continue использую очень часто. вот от exit пытаюсь отказаться, но пока не очень получается.
← →
Zacho © (2004-12-14 14:27) [29]ламер © (14.12.04 13:41) [28]
вот от exit пытаюсь отказаться, но пока не очень получается.
А зачем отказываться от exit ? Imho, все аргументы (типа "дурной тон") надуманные
← →
Igorek © (2004-12-14 15:02) [30]DiamondShark © (14.12.04 12:30) [27]
> Видимо, в школе хорошо учиться.
Спасибо, очень мило.
>i := 0;
>while (i < Len) and not odd(M[i]) do inc(i);
>if i < Len then // делаем чего-то с m[i]
> else // вообще нету нечётных чисел
Абзац до конца дочитал? :-)
Также после прочтения до конца, еще раз см. [25]
← →
марсианин © (2004-12-14 15:16) [31]полнстью согласен с [20] Alex Konshin © (14.12.04 01:02)
написание программ ради хорошего стиля - уже плохой стиль...
но ведь есть вещи, которые просто делать не рекомендуется.. вот не знаю почему, но тем не менее они прекрасно работают..
оставим exit внутри finally, работает и хорошо (к тому же для SEH фреймов как альтернатива есть комманда __leave правда только в Визуал Студио)
а как вот насчет, например, вызова виртуальных функций в конструкторе?
Страуструп не рекомендует.
на паскале не пробовал, а если и пробовал, то не задумывался.. а Визуал Студио такое проходит просто со свистом..
← →
имя (2004-12-14 15:23) [32]Удалено модератором
← →
vidiv © (2004-12-14 15:25) [33]
> KSergey © (14.12.04 07:59) [21]
> По поводу всех эти Break вспоминается мне все время такой
> случай.
> Quark XDK, примеры.
> В одном из них встречаю конструкцию такого вида (было на
> Си, ну да не суть):
>
> while (TRUE) {
> ....
> if (...) break;
> ....
> if (...) break;
> ....
> break;
> }
Я на php так делаю :)
← →
Игорь Шевченко © (2004-12-14 15:27) [34]марсианин © (14.12.04 15:16) [31]
> а как вот насчет, например, вызова виртуальных функций в
> конструкторе?
> Страуструп не рекомендует.
Ну пусть не вызывает :)
Обычно, когда чего-то рекомендуют, то приводят к рекомендациям аргументы. В противном случае сообщение относится к разряду религиозных, а религия и программирование вещи не сильно совместимые.
С уважением,
← →
DiamondShark © (2004-12-14 15:29) [35]Удалено модератором
← →
Суслик © (2004-12-14 15:30) [36]
> for i := 0 to Len - 1 do
> if Odd(M[i]) then Break;
я тоже не против такого. Лично мне такой подход кажется более эргономичным.
goto не пользуюсь по тем же причинам - НЕ кажется эргономичным.
Вообще - это все дело привычки.
← →
Игорь Шевченко © (2004-12-14 15:32) [37]
> > for i := 0 to Len - 1 do
> > if Odd(M[i]) then Break;
>
> я тоже не против такого. Лично мне такой подход кажется
> более эргономичным
Ну и в лужу. Извиняюсь.
← →
Суслик © (2004-12-14 15:34) [38]
> [37] Игорь Шевченко © (14.12.04 15:32)
> Ну и в лужу
В твоем любимом стиле, если не против?
Хде доводы!??
Иначе как ты можешь знать про лужу - рядом стоял? :))
← →
vidiv © (2004-12-14 15:35) [39]имхо, главное логику операторов понимать чтобы использовать. для того их придумали и добавили.
← →
Игорь Шевченко © (2004-12-14 15:38) [40]Суслик © (14.12.04 15:34) [38]
Ви таки хотите доводов? Их есть у меня.
Дело в том, что используя такой код, ты не найдешь первое нечетное число. Ты даже не узнаешь, есть ли в массиве нечетные числа.
Страницы: 1 2 3 4 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.037 c