Подтвердить что ты не робот

Почему не было предложение Java "throws" (в объявлении метода), включенное в С#?

Почему не было предложение Java "throws" (в объявлении метода), включенное в С#?

4b9b3361

Ответ 2

(В дополнение к Patrik несколько окончательный ответ.)

Проверенные исключения в Java - очень спорная проблема. Я любил их и много пропустил при написании С#. Мне казалось, что я еду без ремня безопасности. Теперь они меня раздражают... потому что, хотя они теоретически звучат как хорошая идея, они определенно вызвали у меня много горя, но без материальной выгоды. Я не могу вспомнить, что когда-либо сталкивался с ошибкой в ​​коде С#, который проверял исключения, спас бы меня. Это не значит, что этого не может произойти, но со мной этого не случилось.

Досадно, что в некоторых отношениях все еще кажется, что С# слишком слаб, но этот подход Java не совсем правильный. Это похоже на лучшее решение, ожидающее обнаружения, и попытка Java была хорошим экспериментом, но это не совсем сработало.

Ответ 3

Я думаю, что проверенные исключения, как функция языка, раскрывают некоторые культурные различия между Microsoft и Sun.

По большей части Microsoft является компанией-клиентом. Большинство программного обеспечения, которое они создают, и на что нацелен их стек разработки, - это клиентское программное обеспечение.

Да, да, я знаю, что Microsoft делает серверное программное обеспечение. Тем не менее, Office и Windows намного больше с точки зрения доходов, чем Windows Server и Exchange.

Я считаю справедливым сказать, что большинство программ, написанных на .NET, (и тем более с VB 6) - это клиентское программное обеспечение. Конечно, большой кусок этого - веб-программное обеспечение, которое работает на веб-сервере, но большинство из них действительно... "клиентские типы веб-приложений". Я бы сказал, что большинство веб-приложений больше похожи на "Word", тогда они похожи на Exchange.

И да, я знаю, что есть службы WCF и SOAP и тому подобное, но обычно это просто "средняя посуда" для типа "клиентский".

Sun, с другой стороны, в первую очередь является серверной компанией. Их программное обеспечение не является самым большим, когда дело доходит до пользовательского интерфейса (это не мало для Unix... просто для Solaris.. Mac OS X основано на unix и имеет феноменальный пользовательский интерфейс, разница между двумя что Sun действительно не заботится о пользовательском интерфейсе, как это делает Apple). Они даже продают ТОНКИХ КЛИЕНТОВ, которые пытаются выталкивать все на сервер.

Итак... в любом случае... Microsoft - это в основном клиентская компания, а Sun - в основном серверная компания.

Когда вы пишете серверное программное обеспечение, надежность - это большая вещь. Это огромно. Если сервер электронной почты выходит из строя, люди не получают электронную почту, и бизнес останавливается. Таким образом, убедитесь, что сервер может разумно справляться с большинством ошибок, которые могут произойти, это большая часть продажи почтового сервера.

С клиентским программным обеспечением. надежность важна, но нет, где рядом с AS важно, как с серверным программным обеспечением. Пока работают большинство сценариев основной линии, люди довольны. Во многих случаях сценарии сумасшедшего края можно просто игнорировать или обрабатывать в целом.

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

С действительно высокими требованиями к надежности, проверенные исключения могут быть полезными. Если есть сценарий, который вы не ожидали, и для вашего бизнеса важно, чтобы вы все ожидали, тогда компилятор скажет вам... "Эй, вы не справились с RocketFuelExhaustedException" было бы полезно.

Итак, я думаю, что проверенные исключения связаны с точкой зрения Sun в качестве поставщика сервера.

Для Microsoft, как клиентской компании, продающей инструменты для разработчиков для разработчиков программного обеспечения клиента, проверенные исключения, конечно, ужасно раздражают вещи, которые просто мешают реальной работе.

Что мои $0.02 в любом случае...

Ответ 4

Основная причина заключается в том, что разработчики С# решили не использовать "проверенные исключения". Это означает, что разработчику не нужно окружать предложение бросания исключения внутри блока try-catch. Считалось, что это полезно только для небольших приложений и не имеет реальной выгоды для крупных проектов. Кроме того, проверенные исключения были фактически использованы разработчиками, которые постоянно используют пустые блоки catch. Поскольку исключенных исключений не существует, нет причин для объявления метода, какие исключения могут быть выбраны.

Использование или не "проверяемые исключения" является спорной темой, но большинство, похоже, согласны, что нет никакой необходимости в них. Spring, который является известной структурой в Java, превращает проверенные исключения в исполняемые файлы.

Ответ 5

Исключения, по-видимому, являются "исключительными" событиями. В парадигмах .net исключения никогда не должны возникать (почему у вас есть методы, такие как TryParse,...), поэтому нет смысла принудительно обрабатывать события, которые не должны возникать в любом случае.