Последнее время я не программирую, а рaзгpебаю зaвалы которые оставили до меня покoления программистов. Чтобы внести минимальное декоративное изменение требуется исправить несколько модулей и потратить несопоставимую по сложности работу по выискиванию всех мест, в которые надо внести изменения.
Дело в том, что тем методы, которые допустимы в примерах, олимпиадах и лабах по программированию, совершенно неприемлемы при создании крупных и долгоживущих прикладных программ.
Предлагаю в этой теме публиковать примеры, как не надо программировать на Delphi, что бы потом не было мучительно больно от встречи с теми, кто исправлял твой код.
Всего в теме 421 сообщение
Добавить свое сообщение
Отслеживать это обсуждение
№ 211 19-05-2008 02:13 | |
Ответ на »сообщение 208« (Geo)
___________________________
чтобы потестировать реализацию алгоритмов Это, вроде, не подходит под определение крупных и долгоживущих проектов, так что можно и забить :o)
№ 210 19-05-2008 01:58 | |
Ответ на »сообщение 209« (DRON)
___________________________
Geo:
Кстати, фанатам борьбы со всеми и всяческими варнингами.
DRON:
Правильнее говорить: "фанатам борьбы с включенными варнингами"
Я бы даже уточнил: "фанатам борьбы с не по делу включенными варнингами"... :)
№ 209 19-05-2008 01:31 | |
Ответ на »сообщение 208« (Geo)
___________________________
Кстати, фанатам борьбы со всеми и всяческими варнингами.
Правильнее говорить: "фанатам борьбы с включенными варнингами", потому как иначе мы огребём миллион варнингов на тему UnsafeЧегоТоТам, не актуальных для не .NET. У меня выключены вот эти... и да, я тоже фанат :)
-w-SYMBOL_PLATFORM
-w-UNIT_PLATFORM
-w-GARBAGE
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
№ 208 19-05-2008 01:19 | |
Кстати, фанатам борьбы со всеми и всяческими варнингами. Нужно было по-быстрому сваять тестовый пользовательский интерфейс для одной программки, чтобы потестировать реализацию алгоритмов. Бросил TShellTreeView и огреб регулярный хинт варнинг о том, что компонент явялется платформозависимым. Вот теперь думаю, бороться мне с этим варнингом или просто отключить :D
№ 207 17-05-2008 14:02 | |
Ответ на »сообщение 199« (Бел Амор)
___________________________
Но если убрать после цикла присвоение значения Result, то, кроме того, что это будет неправильно по логике (о чём компилятор не знает), мы получим ещё и предупреждение компилятора:
Ну как же не знает, раз даже предупреждает? ;)
А вообще для этого есть while. Тем более, что через while куда красивее код.
№ 206 16-05-2008 11:22 | |
Ответ на »сообщение 203« (Бел Амор)
___________________________
С одной стороны - удобство и факт того, что в VCL это применяется.
Факт применения чего-то в VCL сам по себе не должен служить оправданием для применения этого. Квалификация кодеров VCL далеко не всегда по высоте, и это особенно обидно на фоне очень талантливо придуманной архитектуры VCL в целом.
№ 205 16-05-2008 08:57 | |
Ответ на »сообщение 204« (Бел Амор)
___________________________
И в этом случае совершенно не важно, что там стоит под несработавшим условием: Exit или Break... Действительно имеет место быть (в D2007 тоже), будем знать. Это, наверно, скорее в подводные камни и QC относится...
№ 204 16-05-2008 06:05 | |
Ответ на »сообщение 203« (Бел Амор)
___________________________
если же Break заменить на Exit, то предупреждение появится, хотя принципиально ничего не изменилось: Result в обоих случаях может быть не присвоен, поскольку динамический массив может быть нулевой длины...
Более того, в обоих случаях, даже если массив - ненулевой длины, то в случае несрабатывания условия и штатного завершения цикла, переменная цикла, т.е. Result, должна рассматриваться как имеющая неопределённое значение... И в этом случае совершенно не важно, что там стоит под несработавшим условием: Exit или Break...
№ 203 16-05-2008 04:03 | |
Ответ на »сообщение 202« (Cepгей Poщин)
___________________________
Нюанс тут один — не нужно оставлять в программе строки на которые выдаются предупреждения.
В этом вопросе наши взгляды полностью совпадают. При полной компиляции проекта не должно быть ни одного предупреждения...
Вообще, причина, которая побудила задать вопрос - следующая... В принципе, этот приём мне известен давно, но до сих пор реально я его не применял. Чисто по психологическим причинам, поскольку сильно восприятие того, что переменная цикла за пределами цикла - вещь ненадёжная... С одной стороны - удобство и факт того, что в VCL это применяется. С другой - некоторые сомнения. А тут в одном вопросе привёл код с использованием этого приёма. Поскольку функция вложенная, не хотелось её раздувать... И как раз забыл ту самую строчку, получил предупреждение, пошёл читать справку. Вроде всё нормально, при выходе по Exit - можно. Но остались некоторые сомнения. Решил уточнить...
Но вопросы ещё остались.
1. Почему-то в перечень безопасных не попал break. Это недосмотр или за этим может что-то стоять?
2. Если приведённый ранее код немного изменить: var
Keywords: array of String;
function FindKeyword(Keyword: String): Integer;
begin
for Result := Low(Keywords) to High(Keywords) do
if Keyword = Keywords[Result] then
Break;
end; то предупреждение не выдаётся, если же Break заменить на Exit, то предупреждение появится, хотя принципиально ничего не изменилось: Result в обоих случаях может быть не присвоен, поскольку динамический массив может быть нулевой длины... Возможно, просто не предусмотрен случай массива нулевой длины, а Exit по условию - предусмотрен...
№ 202 16-05-2008 02:19 | |
Ответ на »сообщение 199« (Бел Амор)
___________________________
Но тут есть некоторые нюансы Нюанс тут один — не нужно оставлять в программе строки на которые выдаются предупреждения. Даже если по логике работы программы Result := -1; ни когда не может выполняться, то во-первых через месяц логика может измениться, а во-вторых когда список предупреждений большой, то разобраться в нем крайне сложно, что практически сводит к нулю его полезность.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|