<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Исключения в Java (exceptions, errors, исключительные ситуации)</title>
	<link>http://www.javenue.info/post/62</link>
	<description>Блог разработчика о Java и родственных технологиях</description>
	<pubDate>Sun, 05 Feb 2012 00:22:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>

	<item>
		<title>By: Chapman</title>
		<link>http://www.javenue.info/post/62#comment-89229</link>
		<author>Chapman</author>
		<pubDate>Fri, 23 Sep 2011 22:44:14 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-89229</guid>
		<description>Hi! This can be my first comment right here and so i i would like to present a simple shout out and show you I really take pleasure in looking at your blog posts. Are you able to advise any blogs</description>
		<content:encoded><![CDATA[<p>Hi! This can be my first comment right here and so i i would like to present a simple shout out and show you I really take pleasure in looking at your blog posts. Are you able to advise any blogs</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bsv</title>
		<link>http://www.javenue.info/post/62#comment-58257</link>
		<author>bsv</author>
		<pubDate>Thu, 13 Aug 2009 14:00:24 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-58257</guid>
		<description>--------------------------------------------------------------------------
lucker wrote:
Ну а в тех случаях когда речь идет о нару?ении контракта метода (не бизнес-ограничений) не надо и задумываться - только unchecked, и ловить их должен код, находящийся в самом начале потока, и ничего кроме логирования информации об о?ибки с ними сделать он не может, да и не должен.
--------------------------------------------------------------------------

такой подход приведет к тому что код в начале потока будет в 80% случаев получать исключение неизвестно по какой причине и как возник?ее, например стэк трэйс на вэб странице, ни один из модулей который будет использовать такой метод и понятия не будет иметь о том что гдето в глубине ктото выбросил анчекед исключение и результат его может быть самым удручающим, 
например: если такой метод кто-то начнет использовать в цикле то из-за одноко неправильного объекта переданого в метод, который выкинет анчекед из-за нару?ения контракта, вместо скажем ожидаемого списка из нескольких строк на экране клиент не увидит ни одного, а мог бы просто увидеть на один мень?е (тот который послужил причиной исключения) А произойдет это потому что девелопер который будет писать вывод понятия не будет иметь что данный конкретный метод 
может просто выкинуть тот или иной рантайм, если такой метод в случае нару?ения контракта выбросит чекед исключение то пользователь метода будет иметь информацию и ре?ит что ему делать с данным исключением, код будет иметь более предсказуемое поведение а следственно станет более професиональным.

?спользование анчекед исключений где попало как раз и делает код мало пригодным к использованию, поскольку как раз скрывает тот самый контракт метода, когда пользователь метода понятия не имеет какие исключения могут вылететь из данного метода. А вылетать такие исключения как раз любят на продак?ене во время демонстрации системы заказчику.

Статья кстати выглядит немного поверхностной, основная проблема в написании комерческого софта именно в том чтобы сделать его реюзабельным и легко изменяемым к постоянно меняющимся требованиям при этом надежным,  предсказуемым и устойчивым. Поэтому приведенная цитата о том что 90% кода обрабатывает исключения а 10% делает работу - это цитата человека который врядли писал что-то что потом используют другие... поскольку работа програмы включает в себя и надежность и предсказуемость и повторяемость результатов и мас?табируемость и возможность использовать код еще кем-то, все то что отличает комерческий код профи от кода студента.</description>
		<content:encoded><![CDATA[<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
lucker wrote:<br />
Ну а в тех случаях когда речь идет о нару?ении контракта метода (не бизнес-ограничений) не надо и задумываться - только unchecked, и ловить их должен код, находящийся в самом начале потока, и ничего кроме логирования информации об о?ибки с ними сделать он не может, да и не должен.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>такой подход приведет к тому что код в начале потока будет в 80% случаев получать исключение неизвестно по какой причине и как возник?ее, например стэк трэйс на вэб странице, ни один из модулей который будет использовать такой метод и понятия не будет иметь о том что гдето в глубине ктото выбросил анчекед исключение и результат его может быть самым удручающим,<br />
например: если такой метод кто-то начнет использовать в цикле то из-за одноко неправильного объекта переданого в метод, который выкинет анчекед из-за нару?ения контракта, вместо скажем ожидаемого списка из нескольких строк на экране клиент не увидит ни одного, а мог бы просто увидеть на один мень?е (тот который послужил причиной исключения) А произойдет это потому что девелопер который будет писать вывод понятия не будет иметь что данный конкретный метод<br />
может просто выкинуть тот или иной рантайм, если такой метод в случае нару?ения контракта выбросит чекед исключение то пользователь метода будет иметь информацию и ре?ит что ему делать с данным исключением, код будет иметь более предсказуемое поведение а следственно станет более професиональным.</p>
<p>?спользование анчекед исключений где попало как раз и делает код мало пригодным к использованию, поскольку как раз скрывает тот самый контракт метода, когда пользователь метода понятия не имеет какие исключения могут вылететь из данного метода. А вылетать такие исключения как раз любят на продак?ене во время демонстрации системы заказчику.</p>
<p>Статья кстати выглядит немного поверхностной, основная проблема в написании комерческого софта именно в том чтобы сделать его реюзабельным и легко изменяемым к постоянно меняющимся требованиям при этом надежным,  предсказуемым и устойчивым. Поэтому приведенная цитата о том что 90% кода обрабатывает исключения а 10% делает работу - это цитата человека который врядли писал что-то что потом используют другие&#8230; поскольку работа програмы включает в себя и надежность и предсказуемость и повторяемость результатов и мас?табируемость и возможность использовать код еще кем-то, все то что отличает комерческий код профи от кода студента.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: baka</title>
		<link>http://www.javenue.info/post/62#comment-25675</link>
		<author>baka</author>
		<pubDate>Mon, 04 Aug 2008 04:58:46 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-25675</guid>
		<description>2 black zorro: можно написать метод foo таким образом чтоб он сам проводил проверку ("хватает ли на счете"), и возвращал boolean.

public boolean foo (int a) {
    if (_bablo &#62;= a){
        bablo-=a;
        return true;
    } 
    return false;
}</description>
		<content:encoded><![CDATA[<p>2 black zorro: можно написать метод foo таким образом чтоб он сам проводил проверку (&#8221;хватает ли на счете&#8221;), и возвращал boolean.</p>
<p>public boolean foo (int a) {<br />
    if (_bablo &gt;= a){<br />
        bablo-=a;<br />
        return true;<br />
    }<br />
    return false;<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/62#comment-20766</link>
		<author>black zorro</author>
		<pubDate>Sun, 20 Jan 2008 19:41:37 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-20766</guid>
		<description>Насчет плагинов для wordpress.
Сразу предупредив, что с wordpress знаком ?апочно (собственный сайт на mediawiki).
По следующей ссылке Вы можете найти каталог с плагинами рас?иряющими функции комментирования:
 http://blog.trampampam.ru/wordpress/comments_plugins/
Чтобы не играть роль google ре?ил поставить парочку из них и посмотреть функциональность.
 http://wordpress.org/extend/plugins/live-comment-preview/
 http://blogwaffe.com/ajax-comment-preview/ - установился без проблем, внизу после формы добавления комментария появилась кнопка "Preview". Хотя зачем нужна эта кнопка я не понял, т.к. при наборе текста сразу после text-области появляется предпросмотр. Впечатления положительные, т.к. попытка ввести текст с символами "мень?е чем" и "боль?е чем" была отловлена.
 Посоветую еще поставить http://sw-guide.de/wordpress/plugins/edit-comments-xt/. Добавляется функция редактирования своего комментария в течении некоторого времени после отправки. ?з минусов: редактирование только для зарегистрированных пользователей.
Подсветка: в коментариях может встречаться пример исходников и их было бы тоже очень неплохо подсветить. Я пользуюсь библиотечкой от "softwaremaniac-а",
но еще рекомендуют codecolorer (никогда не сталкивался, но учитывая что он построен на базе geshi все должно быть "колечком").
http://www.tretyak.com/2007/05/08/syntax-highlighters-for-wordpress.html

?справленный пример кода - http://paste.bradleygill.com/index.php?paste_id=185</description>
		<content:encoded><![CDATA[<p>Насчет плагинов для wordpress.<br />
Сразу предупредив, что с wordpress знаком ?апочно (собственный сайт на mediawiki).<br />
По следующей ссылке Вы можете найти каталог с плагинами рас?иряющими функции комментирования:<br />
 <a href="http://blog.trampampam.ru/wordpress/comments_plugins/" rel="nofollow">http://blog.trampampam.ru/wordpress/comments_plugins/</a><br />
Чтобы не играть роль google ре?ил поставить парочку из них и посмотреть функциональность.<br />
 <a href="http://wordpress.org/extend/plugins/live-comment-preview/" rel="nofollow">http://wordpress.org/extend/plugins/live-comment-preview/</a><br />
 <a href="http://blogwaffe.com/ajax-comment-preview/" rel="nofollow">http://blogwaffe.com/ajax-comment-preview/</a> - установился без проблем, внизу после формы добавления комментария появилась кнопка &#8220;Preview&#8221;. Хотя зачем нужна эта кнопка я не понял, т.к. при наборе текста сразу после text-области появляется предпросмотр. Впечатления положительные, т.к. попытка ввести текст с символами &#8220;мень?е чем&#8221; и &#8220;боль?е чем&#8221; была отловлена.<br />
 Посоветую еще поставить <a href="http://sw-guide.de/wordpress/plugins/edit-comments-xt/." rel="nofollow">http://sw-guide.de/wordpress/plugins/edit-comments-xt/.</a> Добавляется функция редактирования своего комментария в течении некоторого времени после отправки. ?з минусов: редактирование только для зарегистрированных пользователей.<br />
Подсветка: в коментариях может встречаться пример исходников и их было бы тоже очень неплохо подсветить. Я пользуюсь библиотечкой от &#8220;softwaremaniac-а&#8221;,<br />
но еще рекомендуют codecolorer (никогда не сталкивался, но учитывая что он построен на базе geshi все должно быть &#8220;колечком&#8221;).<br />
<a href="http://www.tretyak.com/2007/05/08/syntax-highlighters-for-wordpress.html" rel="nofollow">http://www.tretyak.com/2007/05/08/syntax-highlighters-for-wordpress.html</a></p>
<p>?справленный пример кода - <a href="http://paste.bradleygill.com/index.php?paste_id=185" rel="nofollow">http://paste.bradleygill.com/index.php?paste_id=185</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: c0nst</title>
		<link>http://www.javenue.info/post/62#comment-20730</link>
		<author>c0nst</author>
		<pubDate>Fri, 18 Jan 2008 21:51:06 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-20730</guid>
		<description>2 lucker: ну да, я и имел в виду управление ходом выполнения программы. Грубый пример - поймать NPL, сделать заключение, что объект таки да null :), ну и как-то это подправить.
2 black zorro: Весь код пропал куда-то. ?справил на сколько смог понять идею. Если что-то напутал, напи?и, пожалуйста.
А на счет preview - я PHP плохо знаю. Разве что найду где-нибудь plugin с функциональностью предварительного просмотра.</description>
		<content:encoded><![CDATA[<p>2 lucker: ну да, я и имел в виду управление ходом выполнения программы. Грубый пример - поймать NPL, сделать заключение, что объект таки да null :), ну и как-то это подправить.<br />
2 black zorro: Весь код пропал куда-то. ?справил на сколько смог понять идею. Если что-то напутал, напи?и, пожалуйста.<br />
А на счет preview - я PHP плохо знаю. Разве что найду где-нибудь plugin с функциональностью предварительного просмотра.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/62#comment-20726</link>
		<author>black zorro</author>
		<pubDate>Fri, 18 Jan 2008 20:06:43 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-20726</guid>
		<description>В предыдущем пример вкрался подлый баг, исправьте пожалуйста, там символ "мень?е чем" вставился как тег. ? "полетела" часть кода.
Ну и если совсем обнаглеть
А слабо сделать Preview перед отправкой сообщения.
</description>
		<content:encoded><![CDATA[<p>В предыдущем пример вкрался подлый баг, исправьте пожалуйста, там символ &#8220;мень?е чем&#8221; вставился как тег. ? &#8220;полетела&#8221; часть кода.<br />
Ну и если совсем обнаглеть<br />
А слабо сделать Preview перед отправкой сообщения.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/62#comment-20708</link>
		<author>black zorro</author>
		<pubDate>Thu, 17 Jan 2008 23:57:41 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-20708</guid>
		<description>Я бы не сказал, что использовать исключительные ситуации для реализации логики - это плохо.

смотрите:

class Banka {
 private double _bablo;
 public double getBablo (){return _bablo;}
 public void foo (int a) {
   if (_bablo &#60; a)
      b.foo (_bablo);
   else
      _bablo -= a;
  }
}
 
использование в вариенте 1.
Banka b = new Banka ();
double sum = 0;
double bablo = b.getBablo();
b.foo (100);
if (bablo &lt;= 100)
sum += 100;
else 
sum += bablo;


второй вариант:

class Banka {
 private double _bablo;
 public double getBablo (){return _bablo;}
 public void foo (int a) {
   if (_bablo &#60; a)
      throw new NoBablo();
  _bablo -= a;
  }
}

 использование в вариенте 2.
 Banka b = new Banka ();

 try{
  b.foo (100);
 }
 catch (NoBablo e){
  // no bablo
 }

Кажется, что разницы между первым подходом и вторым нет. ? там и там есть контроль над снятием денег. Но в первом случае мы размазываем логику работы банка во множестве мест. 
А теперь представим ситуацию, что правило снятия бабла поменялось (хотя на стадии проектирования аналитик клялся, что никогда и нигде такого быть не может, но мы все знаем цену их обещаниям) и теперь можно снимать бабло на сумму боль?ую чем есть на счете. Соотвественно, правим метод (это легко), а потом по?ли искать в тысяче мест где возможно мы вставили проверку перед вызовом foo (снятием денег).</description>
		<content:encoded><![CDATA[<p>Я бы не сказал, что использовать исключительные ситуации для реализации логики - это плохо.</p>
<p>смотрите:</p>
<p>class Banka {<br />
 private double _bablo;<br />
 public double getBablo (){return _bablo;}<br />
 public void foo (int a) {<br />
   if (_bablo &lt; a)<br />
      b.foo (_bablo);<br />
   else<br />
      _bablo -= a;<br />
  }<br />
}</p>
<p>использование в вариенте 1.<br />
Banka b = new Banka ();<br />
double sum = 0;<br />
double bablo = b.getBablo();<br />
b.foo (100);<br />
if (bablo <= 100)<br />
sum += 100;<br />
else<br />
sum += bablo;</p>
<p>второй вариант:</p>
<p>class Banka {<br />
 private double _bablo;<br />
 public double getBablo (){return _bablo;}<br />
 public void foo (int a) {<br />
   if (_bablo &lt; a)<br />
      throw new NoBablo();<br />
  _bablo -= a;<br />
  }<br />
}</p>
<p> использование в вариенте 2.<br />
 Banka b = new Banka ();</p>
<p> try{<br />
  b.foo (100);<br />
 }<br />
 catch (NoBablo e){<br />
  // no bablo<br />
 }</p>
<p>Кажется, что разницы между первым подходом и вторым нет. ? там и там есть контроль над снятием денег. Но в первом случае мы размазываем логику работы банка во множестве мест.<br />
А теперь представим ситуацию, что правило снятия бабла поменялось (хотя на стадии проектирования аналитик клялся, что никогда и нигде такого быть не может, но мы все знаем цену их обещаниям) и теперь можно снимать бабло на сумму боль?ую чем есть на счете. Соотвественно, правим метод (это легко), а потом по?ли искать в тысяче мест где возможно мы вставили проверку перед вызовом foo (снятием денег).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lucker</title>
		<link>http://www.javenue.info/post/62#comment-9933</link>
		<author>lucker</author>
		<pubDate>Sun, 06 May 2007 11:53:06 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-9933</guid>
		<description>&lt;blockquote&gt;Очень дурной стиль так делать.&lt;/blockquote&gt;

Хм. это почему? Альтернатива? Я же говорю не об использовании исключений для управление flow программы, а об использовании их для сигнализации того, что запро?енная операция не может быть выполнена с объяснением причины.</description>
		<content:encoded><![CDATA[<blockquote><p>Очень дурной стиль так делать.</p></blockquote>
<p>Хм. это почему? Альтернатива? Я же говорю не об использовании исключений для управление flow программы, а об использовании их для сигнализации того, что запро?енная операция не может быть выполнена с объяснением причины.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Entry_N3</title>
		<link>http://www.javenue.info/post/62#comment-9654</link>
		<author>Entry_N3</author>
		<pubDate>Mon, 30 Apr 2007 14:25:41 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-9654</guid>
		<description>Steve McConnell: "По оценкам некоторых ученых код на целых 90% состоит из блоков обработки исключительных ситуаций, о?ибок и т. п., из чего следует, что только 10% кода отвечают за номинальный режим работы программы (Shaw in Bentley, 1982)."</description>
		<content:encoded><![CDATA[<p>Steve McConnell: &#8220;По оценкам некоторых ученых код на целых 90% состоит из блоков обработки исключительных ситуаций, о?ибок и т. п., из чего следует, что только 10% кода отвечают за номинальный режим работы программы (Shaw in Bentley, 1982).&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: klim</title>
		<link>http://www.javenue.info/post/62#comment-9449</link>
		<author>klim</author>
		<pubDate>Fri, 27 Apr 2007 22:12:34 +0000</pubDate>
		<guid>http://www.javenue.info/post/62#comment-9449</guid>
		<description>&lt;i&gt;Классический пример - снятие денег со счета, когда выкидывается исключение, говорящее о том что деню?ок то не хватает.&lt;/i&gt;

Очень дурной стиль так делать.</description>
		<content:encoded><![CDATA[<p><i>Классический пример - снятие денег со счета, когда выкидывается исключение, говорящее о том что деню?ок то не хватает.</i></p>
<p>Очень дурной стиль так делать.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

