Последнее время я не программирую, а рaзгpебаю зaвалы которые оставили до меня покoления программистов. Чтобы внести минимальное декоративное изменение требуется исправить несколько модулей и потратить несопоставимую по сложности работу по выискиванию всех мест, в которые надо внести изменения.
Дело в том, что тем методы, которые допустимы в примерах, олимпиадах и лабах по программированию, совершенно неприемлемы при создании крупных и долгоживущих прикладных программ.
Предлагаю в этой теме публиковать примеры, как не надо программировать на Delphi, что бы потом не было мучительно больно от встречи с теми, кто исправлял твой код.
Всего в теме 421 сообщение
Добавить свое сообщение
Отслеживать это обсуждение 
№ 221 19-05-2008 08:45 |  |
Ответ на »сообщение 220« (DRON)
___________________________
Да бог его знает. Тут придется очень аккуратно все прорабатывать и тестировать, так как этими вещами я не особо плотно не занимался. А в случае передачи информации через возвращаемое значение функции все выглядит проще и понятнее.
№ 220 19-05-2008 08:33 |  |
Ответ на »сообщение 219« (Geo)
___________________________
То есть одна команда может начать прочесывакть кучу файлов, а в этих файлах содержитмся информация о других файлах. И я не хочу брать на себя решение о прерывании всей работы из-за того, что один файл не читается.
Может тогда какое нибудь событие типа OnError(E:Exception;var Handled:Boolean) сделать.
№ 219 19-05-2008 06:49 |  |
Ответ на »сообщение 218« (Ins)
___________________________
В моем случае прсото идет обработка взаимосвязанных файлов. То есть одна команда может начать прочесывакть кучу файлов, а в этих файлах содержитмся информация о других файлах. Ну, это так... примерно. И я не хочу брать на себя решение о прерывании всей работы из-за того, что один файл не читается. Пусть пользователь сам решает, так ли уж необходим этот или забить на него и продолжить дальше. Поэтому и решил в первом приближении сделать функцию, кототорая возвращает true или false в зависимости от того, была ошибка или нет. А содержательный результат возвращает через параметр OUT.
Впрочем, это пока только первое приближение. Возможно, еще все несколько раз поменяется.
№ 218 19-05-2008 06:07 |  |
Ответ на »сообщение 217« (Geo)
___________________________
Возможно, вынести чтение из файла в отдельную функцию, заключив в TRY-EXCEPT, дабы погасить исключение.
Кстати, философский вопрос :) Что лучше, уведомлять о том, что что-то пошло не так, в виде возвращаемого значения или в виде исключения? Исключение более гибкий механизм, так как позволяет "выкинуть" вверх по цепочке вызовов до первого обработчика, тем самым остановив выполнение ошибочной операции на нужной стадии и вернуться в нужную точку, плюс оно более информативно, но с другой стороны, его обработка требует больших усилий со стороны вызывающего функцию кода.
№ 217 19-05-2008 04:44 |  |
Ответ на »сообщение 215« (panda)
___________________________
>>> Если произойдет исключение, результат функции все равно не будет обработан в вызывающем коде.
Хех! А вот об этом я не подумал (или не знал). Надо будет покумекать. Я то надеялся на возврат false в случае ошибки чтения. Надо будет поглубже поковыряться. Возможно, вынести чтение из файла в отдельную функцию, заключив в TRY-EXCEPT, дабы погасить исключение.
№ 216 19-05-2008 04:18 |  |
Ответ на »сообщение 215« (panda)
___________________________
Так даже логичнее
>>> Чем?
Тем, что ближе к источнику возможных проблем и поэтому нагляднее... О том, что исключение вылетает наружу, и в этом случае ни о каком Result речи быть не может, сразу что-то не подумал. Но потом поправился... Хотел ещё пару слов добавить, но вы меня опередили...
№ 215 19-05-2008 03:45 |  |
Ответ на »сообщение 212« (Geo)
___________________________
в Delphi 7 является источником хинта, что присвоенное в первой строчке значение false нигде не используется.
Правильно. А зачем это присваивание нужно? Если произойдет исключение, результат функции все равно не будет обработан в вызывающем коде.
Ответ на »сообщение 213« (Бел Амор)
___________________________
Так даже логичнее
Чем?
№ 214 19-05-2008 03:38 |  |
Ответ на »сообщение 213« (Бел Амор)
___________________________
>>>А почему бы и нет? Так даже логичнее:
Хотя на самом деле, поскольку мне не нужны вылетающие наружу исключения, я скорее всего написал бы примерно так:
function SomeFunc(const FileName : String) : Boolean;
var
List : TStringList;
begin
List:=TStringList.Create;
try
List.LoadFromFile(FileName);
Result:=true;
except
Result:=false;
end;
List.Free;
end; P.S. (to Geo) И вы тоже сразу так написали бы, если бы обратили внимание на предупреждение... :)
№ 213 19-05-2008 03:26 |  |
Ответ на »сообщение 212« (Geo)
___________________________
Долго медитировал, бороться с данным хинтом или нет :D
А почему бы и нет? Так даже логичнее:
function SomeFuncSRC(const FileName : String) : Boolean;
var
List : TStringList;
begin
List:=TStringList.Create;
try
Result:=false;
List.LoadFromFile(FileName);
Result:=true;
finally
List.Free;
end;
end;
№ 212 19-05-2008 03:04 |  |
Ответ на »сообщение 211« (Cepгей Poщин)
___________________________
Во-первых, про "крупнсоть" и "долгоживучесть" ничего не говорилось. Варнингов быть не должно и точка. Во-вторых, это все же альфа-версия (пусть и мелкой утилиты). И не исключено, что конечный вариант также будет включать TShellTreeView (удобная штука).
Еще пример для борцов с варнингами и хинтами.
Вот такой примерно код:
function SomeFunc(const FileName : String) : Boolean;
var
List : TStringList;
begin
Result:=false;
List:=TStringList.Create;
try
List.LoadFromFile(FileName);
Result:=true;
finally
List.Free;
end;
end;
в Delphi 7 является источником хинта, что присвоенное в первой строчке значение false нигде не используется. Долго медитировал, бороться с данным хинтом или нет :D
Добавить свое сообщение
Отслеживать это обсуждение 
Дополнительная навигация: |
|