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

Вниз

Checked-exceptions, добро или зло?   Найти похожие ветки 

 
Igorek ©   (2005-08-31 14:50) [40]

> Игорь Шевченко ©   (31.08.05 14:34) [34]
> Igorek ©   (31.08.05 14:29) [32]
> Тебе кофейной гущи не выслать наложенным платежом ?

Высылай! :)
--
Мне на самом деле интересно, что может вызвать AV в .NET проекте.


 
DiamondShark ©   (2005-08-31 14:57) [41]


> Суслик ©   (31.08.05 14:48) [39]

Так значит тебе не составит труда привести пример и внятно рассказать, в чём состоит удобство.


 
Kapusto   (2005-08-31 15:26) [42]

Единственное, что напрягает в checked exception - это версионность библиотек. Вот тут при общении клиентского кода и библиотек либо приходится обходиться общим DomainException, и через InnerException передавать, что собственно случилось, либо получаем большую связанность между клиентским и библиотечным кодом...

Но имхо это небольшая плата за то, что я знаю сразу, что мне может высыпаться в конкретной точке, и это заставляет сразу продумывать стратегию обработки нештатных ситуаций... Другое дело, что если везде в коде идет catch(Exception e) {}, то такая обработка нафиг никому не нужна, лучше бы уж ее не было :)


 
Суслик ©   (2005-08-31 16:11) [43]


> DiamondShark ©   (31.08.05 14:57) [41]

ну я же вроде объяснил, что будучи разработчиком библиотеки я могу:
1. диктовать обязательную обработку исключительных ситуаций, которые могут быть в моей библиотке
2. документировать, что пользователю ждать.

Ну давай пример (имена классов не помню, потому без имен классов, но идея понятна).

Есть некий класс, который я разрабатываю и который делает некие файловые операции. Файловые операции возбуждают исключения, которые кто-то обязан обработать.

У меня два варианта:
1. Обработать их самому внутри своего класса. При этом клиент класса не узнает о том, что эти исключения вообще были (если я, конечно, не возбуждю новое исключение).
2. Обязать клиента обрабатывать исключения.

Т.е. получается четкое разграничение ответственности за обработку исключительных ситуаций. В дельфи такого нет, и это имхо плохо: юзаешь некий класс, при этом знаешь, что он юзает другой класс. И вот думай - нужно тебе обрабатывать исключения того (третьего) класса или нет. Там такого нет - при грамотном проектировании классов все ясно - кто за что отвечает.

Опять же повторю, что, как мне кажется, приемущества подхода java проявляются в относительно больших командах разработчиков. В этом случае большую часть работы за контролем итерфейса общения разных разработчиков берет на себя компилятор. Вернее он дает возможность одному разработчику более детально, чем просто имена классов, их методов и параметры, сообщить интерфейс к своему творению.


 
Суслик ©   (2005-08-31 16:36) [44]


> [43] Суслик ©   (31.08.05 16:11)

Добавка.
При этом при разработке своего класса, если я пользуюсь классом, разработанным грамотным разработчиком, я не смогу пропустить обрабоку исключений (компилятор не даст). Я либо их обработаю, либо скажу что мои методы возбуждают эти исключения. Т.о. конечный клиент класса сможет разработать класс, который всегда делает что-то осознанное при возникновении всех возможных (RuntimeException не рассматриваем) исключительных ситуаций.


 
Mystic ©   (2005-08-31 16:44) [45]


> то хорошим тоном было бы сообщить об этом тому, кто будет
> использовать мой код


Лично я редко нуждаюсь в такой информации.

> И вот думай - нужно тебе обрабатывать исключения того (третьего)
> класса или нет.


Взял да посмотрел, в чем проблема? Я привык исходить из того, что исключения может вызвать любой метод :) Это неотьемлемое право метода гарантировано конституцией.

В результате же ты можешь быть уверен, что в плане exception у тебя все правильно.

Не знаю... Больших проблем с этим вроде никогда не было. Я и так обычно уверен, что в плане exception все правильно.


 
Игорь Шевченко ©   (2005-08-31 16:48) [46]

Mystic ©   (31.08.05 16:44) [45]


> Лично я редко нуждаюсь в такой информации


> Я привык исходить из того, что исключения может вызвать
> любой метод :)


> Я и так обычно уверен, что в плане exception все правильно.


Успокаивает то, что Java не только для тебя написана :)


 
Суслик ©   (2005-08-31 17:09) [47]


> [45] Mystic ©   (31.08.05 16:44)

Не зря, кстати, одна из главных книг по java "thinking in java" Эккеля именно так называет: в java надо думать именно javой. :)


 
Mystic ©   (2005-08-31 17:29) [48]

Нет, я прекрасно понимаю, что в коде подобном этому

procedure CheckFail(WinConrol: TWinControl; const Msg: string);
begin
 Raise ECheckFail(WinControl, Msg);
end;

procedure TSomeObject.Validate;
var
 I: Integer;
begin
 try
   for I := 0 to Validators.Count-1 do
     Validators[I].Check
 except
   on E: ECheckFail do
   begin
     ActiveControl := E.WinControl;
     MessageDlg(E.Message, mtError, [mbOk], 0);
   end;
 end;
end;


в Java можно еще на этапе компиляции гарантировать, что метод CheckFail не вызовется случайно вне контекста метода TSomeObject.Validate, но большого облегчения труда программиста от этого я не вижу :)


 
Суслик ©   (2005-08-31 17:34) [49]

а где он вообще вызывается?


 
iZEN ©   (2005-08-31 17:41) [50]

Можно я скажу важную вещь?
Не для каждой библиотеки можно достать документацию, тем более провести декомпиляцию (как правило обфусцированного) кода, если библиотека закрытая.
Checked-exception"s в java избавляет от необходимости заглядывать в документацию на класс и тем более в его исходники - всё проверяется во время компиляции твоего кода, использующего тот сторонний класс без тестовых запусков.


 
Игорь Шевченко ©   (2005-08-31 17:43) [51]

iZEN ©   (31.08.05 17:41) [50]

Настоящему индейцу завсегда плевать на обфускацию.


 
Mystic ©   (2005-08-31 18:14) [52]


> а где он вообще вызывается?


Validators[I].Check

ну и в методах, которые вызываются ними.



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

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

Наверх




Память: 0.57 MB
Время: 0.044 c
14-1125597027
Alex_Korn
2005-09-01 21:50
2005.09.25
Изменчивая CRC32.


2-1124132609
Сергей Никонов
2005-08-15 23:03
2005.09.25
С чего начать?!


2-1124305262
Ксардас
2005-08-17 23:01
2005.09.25
Как разом обнулить все элементы массива?


1-1124972628
lehich
2005-08-25 16:23
2005.09.25
запрос значения параметра (XMLDocument)


2-1124270369
ArtemESC
2005-08-17 13:19
2005.09.25
API