Возврат ошибки из функции

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Возврат ошибки из функции

Сообщение krab » 30.07.2010 17:58:35

Как принято возвращать код ошибки из функции в приложениях Lazarus (функция NonexistentStandardLazarusSetErrorCode(var code: LazErrorType))?

P. S. Конечно, можно изобрести свой способ, но нет ли готового, общепринятого?
Последний раз редактировалось krab 30.07.2010 20:39:32, всего редактировалось 2 раз(а).
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Возврат ошибки из функции

Сообщение MageSlayer » 30.07.2010 20:37:08

Э-э.
Стандартный?
Ну, исключения, или просто код возврата. Лишние глобальные переменные, имхо, никчему.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Возврат ошибки из функции

Сообщение krab » 30.07.2010 20:46:58

MageSlayer писал(а):Э-э.
Стандартный?
Ну, исключения, или просто код возврата. Лишние глобальные переменные, имхо, никчему.

У каждой функции свой, особый, список кодов возврата, единого типа TError=(erErrorOne, erErrorGreat, erErrorAwful) нет?
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Возврат ошибки из функции

Сообщение MageSlayer » 30.07.2010 20:49:49

krab писал(а):
MageSlayer писал(а):Э-э.
Стандартный?
Ну, исключения, или просто код возврата. Лишние глобальные переменные, имхо, никчему.

У каждой функции свой, особый, список кодов возврата, единого типа TError=(erErrorOne, erErrorGreat, erErrorAwful) нет?


Ну, да. Откуда ж взяться единому?
У каждом приложении своя логика.
Или вы имеете в виду какой-то типичный случай типа логгера?
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Возврат ошибки из функции

Сообщение Odyssey » 30.07.2010 20:56:33

Если функция находится в том же приложении (т.е. не в динамической библиотеке), я предпочитаю использовать
Код: Выделить всё
raise Exception.Create('Error message');
Код возврата можно забыть проверить, плюс постоянные проверки загромождают код. А с исключениями получается компактнее и надёжнее.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Возврат ошибки из функции

Сообщение krab » 30.07.2010 21:13:41

Odyssey писал(а):Если функция находится в том же приложении (т.е. не в динамической библиотеке), я предпочитаю использовать
Код: Выделить всё
raise Exception.Create('Error message');

Exception.Destroy при обработке исключения выполнит сам Lazarus или нужно делать самостоятельно при обработке исключения в try..except..?
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Возврат ошибки из функции

Сообщение Mr.Smart » 30.07.2010 21:26:22

Все Эксцепшенны Lazarus уничтожит сам. Если конечно созданы при помощи конструкции raise.

Добавлено спустя 42 секунды:
Вернее не Lazarus, а RTL.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Возврат ошибки из функции

Сообщение А.Н. » 31.07.2010 21:00:58

2krab:
За действия с исключениями полностью отвечает среда. Как в delphi, так и в lazarus.

Вот только есть вопрос.

А так ли нужны эксцепшены?
У меня почему-то такая привычка, обрабатывать их в функциях и возвращать результат.
Кажется, они только мешают. Может, лучше без них?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Возврат ошибки из функции

Сообщение hinst » 31.07.2010 21:17:47

у мну тоже такая привычка, т.к. легче контролировать.
но с другой стороны try - except блоки позволяют ещё лучше контролировать, так что, наверное, я не прав
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Возврат ошибки из функции

Сообщение А.Н. » 01.08.2010 18:33:09

А как быть в случае, когда исключение выбрасывается в середине цикла, и наступает пиз...^Wхорошо?
Приходится оборачивать пустыми try/except.
Ведь, по-идее, это же неправильно? Как, вообще, люди с исключениями работают?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Возврат ошибки из функции

Сообщение MageSlayer » 01.08.2010 19:13:12

А.Н. писал(а):А как быть в случае, когда исключение выбрасывается в середине цикла, и наступает пиз...^Wхорошо?
Приходится оборачивать пустыми try/except.


Хм. Непонятно, какое отношение циклы имеют к исключениям?
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Возврат ошибки из функции

Сообщение krab » 01.08.2010 19:25:43

A.H писал(а):А как быть в случае, когда исключение выбрасывается в середине цикла, и наступает пиз...^Wхорошо?

Код: Выделить всё
while Condition do
begin
  try
    // ...
  except
    on E: YourException do
    begin
       // обработка
    end;
  end;
end;

Все хорошо обрабатывается.
А.Н. писал(а):Приходится оборачивать пустыми try/except.

Это очень плохая практика. Если возникнет ошибка (например, в виде исключения от компонента), вы об этом не узнаете и программа будет продолжать работать неправильно.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Возврат ошибки из функции

Сообщение А.Н. » 01.08.2010 19:50:21

Зато, если выкинет в середине цикла, который должен обработать все элементы (и после него ещё должна быть обработка), программа вообще никак не будет работать. Зависнет, например. А так, элемент будет пропущен и обработка продолжится. К тому же, если исключения выбрасываются библиотекой, что мне искать все классы исключений, которые она может выбросить? Но я не спорю - это действительно неправильно. Вопрос в том как с ними работать по-человечески? Или, exceptions - это, из серии "гладко было на бумаге, да забыли про овраги"?

Добавлено спустя 1 минуту 53 секунды:
2MageSlayer:
Такое же, как и всё остальное. Один из случаев, когда я не понимаю, как с ними правильно работать.
Ещё, например, меня интересует тонна проверок на nil. Ведь, по-идее, в коде не должно быть таких проверок?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Возврат ошибки из функции

Сообщение krab » 01.08.2010 22:28:15

А.Н. писал(а):Вопрос в том как с ними работать по-человечески? Или, exceptions - это, из серии "гладко было на бумаге, да забыли про овраги"?

В Java, кроме обычных, есть проверяемые исключения, когда в описании функции указывается список исключений, которые она может бросать. Компилятор требует, чтобы при ее вызове все они обрабатывались. Только почему-то этот подход не пользуется популярностью в других языках.
Последний раз редактировалось krab 01.08.2010 22:40:45, всего редактировалось 1 раз.
krab
постоялец
 
Сообщения: 108
Зарегистрирован: 17.02.2010 18:23:08

Re: Возврат ошибки из функции

Сообщение MageSlayer » 01.08.2010 22:35:50

А.Н. писал(а):Зато, если выкинет в середине цикла, который должен обработать все элементы (и после него ещё должна быть обработка), программа вообще никак не будет работать. Зависнет, например. А так, элемент будет пропущен и обработка продолжится. К тому же, если исключения выбрасываются библиотекой, что мне искать все классы исключений, которые она может выбросить? Но я не спорю - это действительно неправильно. Вопрос в том как с ними работать по-человечески? Или, exceptions - это, из серии "гладко было на бумаге, да забыли про овраги"?

Добавлено спустя 1 минуту 53 секунды:
2MageSlayer:
Такое же, как и всё остальное. Один из случаев, когда я не понимаю, как с ними правильно работать.
Ещё, например, меня интересует тонна проверок на nil. Ведь, по-идее, в коде не должно быть таких проверок?


Опять неясно.
Если вы имеете в виду какие-то побочные эффекты в циклах, то надо оборачивать try/except и в except вставлять raise для дальнешего разкручивания стека.

Про тонну проверок опять не понял. Может все-таки по-подробнее?
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

Рейтинг@Mail.ru