Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Прослушал тут курсы C#...   Найти похожие ветки 

 
pasha_golub ©   (2006-03-23 15:14) [120]

Дык, а почему нельзя сделать унифицированный обработчик возвращаемого кода?

типо

procedure Check(ErrCode: integer);
begin
case ErrCode of
 ERR_FILE_NOT_FOUND: raise EFileNotFound.Create("blablabla");
 ERR_...
end;
end;

Соответственно вызов метода будет

Check(GetSizeOfSomeFile("path"));

Пример взят из той же самой Делфи, модуль DbTables.pas, где процедура Check выглядит как:


procedure Check(Status: DBIResult);
begin
 if Status <> 0 then DbiError(Status);
end;


 
iZEN ©   (2006-03-23 15:16) [121]

>Игорь Шевченко ©   (23.03.06 14:11) [111]
>А использование более общего предка Throwable ? ;)
Тогда будет потеря информации об исключении. Это как в анегдоте:
- Петька, приборы!!!!
- 29!
- Что 29?!
- А что приборы?
(, где "Приборы" & "29" == Throwable).


 
DiamondShark ©   (2006-03-23 15:21) [122]


> Я бы код возвратил.

Тогда макароны из if-ов получатся. От их написания и, тем более, чтения становится тоскливо.


 
DiamondShark ©   (2006-03-23 15:31) [123]

А, чуть не забыл.

This material should be approached with an open mind, studied carefully, and criticaly considered.

;-)


 
Игорь Шевченко ©   (2006-03-23 15:35) [124]

DiamondShark ©   (23.03.06 15:21) [122]

А так получаются макароны из try/catch - какая разница, только писать дольше.


 
DiamondShark ©   (2006-03-23 16:20) [125]


> Игорь Шевченко ©   (23.03.06 15:35) [124]

В том-то и дело, что не получаются.

Эх... нет под рукой текста недавнего моего сокетно-файлово-одбсёвого проекта...


 
Суслик ©   (2006-03-23 16:31) [126]

кто-то тут писал, что нужно попробовать, тогда станет ясно, зачем это нужно. Причем нужно попробовать не в роли юзера библиотеки, а в роли разработчика, которому не все равно, как она (библиотека) будет использоваться, т.к. он (разработчик библиотеки) скорее всего отвечает больше, чем за разработку той самой библиотки (например, руководит).


 
Игорь Шевченко ©   (2006-03-23 16:33) [127]

DiamondShark ©   (23.03.06 16:20) [125]

А разве анализ разных exceptions не равноценен анализу разных кодов возврата ?

Или вы имеете в виду, что получается код вида

if Foo = SUCCESS then
 if Bar = SUCCESS then
   if FooBar = SUCCESS then
     DoRealWork
   else
     Die
 else
   Die
else
 Die

вместо

 try
   Foo;
   Bar;
   FooBar;
   DoRealWork;
 except
   Die;
 end;

?


 
Игорь Шевченко ©   (2006-03-23 16:34) [128]

Суслик ©   (23.03.06 16:31) [126]


> кто-то тут писал, что нужно попробовать, тогда станет ясно,
>  зачем это нужно


А я, собственно, пробовал...Не на java правда. Я свои суждения из опыта выношу, так ска-ать.


 
DiamondShark ©   (2006-03-23 16:43) [129]


> Игорь Шевченко ©   (23.03.06 16:33) [127]

Примерно, что-то в этом роде, да.


 
Суслик ©   (2006-03-23 16:45) [130]


>  [128] Игорь Шевченко ©   (23.03.06 16:34)

а ты на ней, на java, попробуй.
Ты знаешь, действительно дисциплинирует.
Вот скажи, нет у тебя мечты, чтобы у тебя были дисциплинированные программисты? Наверное, есть. Ясный перец, что только checked expetion"ами их не дисциплинируешь. Но это тоже что-то. Конечно, можно сказать, что рубль дисциплинирует. Но ... тут спорить не буду. :)

Потом, не забывай, что java фреймвоковый язык, для которого разработана туча сред обитания. Одних серверов приложений сколько. В java также есть рефлексия. Как разработчику сервера тебе не плохо бы знать, какие исключения выбрасывает метод. Ясное дело, что runtime exception никто не запрещал возбуждать. А вот другие, явно возбуждаемые в методе ДОЛЖНЫ быть описаны в секции throws (иначе не скомпилиться). Т.е. по сути обсуждаемый механизм есть подписание контракта между тобой (разработчиком логики) и сервером приложений. Вот.


 
Игорь Шевченко ©   (2006-03-23 17:03) [131]

Суслик ©   (23.03.06 16:45) [130]

Эх, молодость, молодость....

DiamondShark ©   (23.03.06 16:43) [129]

Это безусловно верно, код получается менее макаронным. В случае использования exception, как сигнализации об ошибке, после которой должна следовать естественная смерть (в рамках какого-то участка кода), я и сам так рекомендую делать. В случае же, когда тип исключения начинает определять логику программы (и таких примеров можно найти), например, как в [120], программу становится крайне неудобно отлаживать. Потому что при попытке выполнить в отладчике шаг на следующую строку, меня выбрасывает в то место, где произошло исключение.


 
Суслик ©   (2006-03-23 17:21) [132]


>  [131] Игорь Шевченко ©   (23.03.06 17:03)

Крайне не понятны Ваши слова про молодость. Неконсруктивно это.

В [130] упомянуты сервера приложений, коих масса. Есть ощущение, что их тоже молодые делают? :)


 
Игорь Шевченко ©   (2006-03-23 17:28) [133]

Суслик ©   (23.03.06 17:21) [132]

Да я завидую... ;)


 
Verg ©   (2006-03-23 17:37) [134]

Игорь Шевченко ©   (23.03.06 16:33) [127]

if foo <> SUCCESS then die("foo") else
if bar <> SUCCESS then die("bar") else
.............
и т.д.

Будет по крайней мере понятно из-за кого случился die и для этого восе не обязательно, чтобы foo, bar и т.д. генерировали специфические типы exceptions или разные коды ошибок


 
Суслик ©   (2006-03-23 21:32) [135]


> Игорь Шевченко ©   (23.03.06 17:28) [133]
> Да я завидую... ;)

да я понимаю :)))))))))))))


 
GrayFace ©   (2006-03-24 11:16) [136]

> iZEN ©   (21.03.06 12:20) [44]
> >GrayFace ©   (21.03.06 11:12) [43]
> >Сколько ни программировал - ни разу "половины случаев"
> не встречал. >По-моему, самое частое исключение - это Access
> Violation.
> Ну и что, по-вашему, послужило причиной Access Violation?
>  Скорее всего не знаете. А это рантайм-исключение (Unchecked),
>  вызванное обращением к неразмеченной области памяти (скорее
> всего Null Pointer Exception). Но оно слишком общее, чтобы
> судить о контексте выполнения в работающей системе. Кстати,
>  под него очень часто подпадают необработанные исключения,
>  которые возникают в библиотечных методах — в тех самых
> "малозаметных узких местах". Вы их не видите, потому что
> не обрабатываете там, где следовало бы просто из-за недостатка
> информации о реальной сигнатуре метода (когда вызываемый
> метод бросает явное или неявное исключение). Исполняющая
> система Delphi ловит "наверху" всё, по определению, вот
> и выдаёт слишком общее сообщение об ошибке.

Поверьте, я знаю, что говорю.
Если учесть, что все библиотеки Windows не бросают исключений (в 99% случаев), не надо быть семи пядей во лбу, чтобы понять, что никаких "малозаметных узких мест" нету и причина в залазенье за границы масиива и т.п.
Я это к тому, что говорить о "узких местах" в половине случаев абсурдно, т.к. в половине случаев сторонние библиотеки вообще не используются.
А единственное, что не выдается "наверху" про AV - это класс исключения, если это наследник. Только наследники AV - это рекость, да и никто не мешает в Application.OnException вызывать обычный ShowException.

Что я не понимаю в идее checked exceptions - это необходимость явно прописывать бросаемые исключения. Почему бы просто не добавить некоторый хинт по возможным исключениям метода, который будет генериться оболочкой при наведении курсора?



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.77 MB
Время: 0.05 c
2-1143811886
Svetlana_K
2006-03-31 17:31
2006.04.16
Закрыть программу через определённое время?


15-1143477953
DillerXX
2006-03-27 20:45
2006.04.16
Проиграть файл в микрофон :)


15-1143537417
vidiv
2006-03-28 13:16
2006.04.16
Что такое "Графо-манство"


2-1144169054
Вячеслав Бессонов
2006-04-04 20:44
2006.04.16
Запрет закрытия окна


15-1142587310
Juice
2006-03-17 12:21
2006.04.16
Средство Контроля Версий. Выбор версионника.