Re[3]: Result objects - все-таки победили Exceptions?
От: vsb Казахстан  
Дата: 07.01.25 05:11
Оценка:
Здравствуйте, Shmj, Вы писали:

vsb>>Считаю, что непроверяемые исключения в общем случае это идеальный способ обработки ошибок и все эти result objects не нужны (могут быть нужны в специфических случаях, но не в общем случае). Проверяемые исключения тоже не нужны, от них проблем больше, чем пользы. По крайней мере в том виде, в котором они в Java.


S>А какие проблемы с ними?


Да много проблем. Их никто не использует, думаю, это достаточный индикатор того, что что-то с ними не так. У тебя методы превращаются в длиннющие throws из десятков исклюючений. Ты добавляешь в одну реализацию работу с XML и интерфейс должен кидать это исключение, все клиенты сломаны, теперь это XML исключение должно бросаться изо всех клиентов этого интерфейса.

Или на каждый класс надо создавать отдельное исключение, а то и на каждый метод, заворачивающий вложенное исключение. И весь смысл этой типизации теряется кроме тонн лишней писанины.

Я не отрицаю некоторого смысла во всей этой идее проверяемых исключений, но конкретно в Java реализация фатально плохая. И я не уверен, что знаю, как сделать лучше.

Если немного пересмотреть всю эту концепцию, можно прийти к аналогии со статической и динамической типизацией.

Думаю, сегодня уже никто не будет отрицать, что и языки с динамической типизацией и языки со статической типизацией имеют свои плюсы и минусы. При этом тем же Haskell-ем, который можно считать эдакой кульминацией статической типизации, мало кто пользуется, не в последнюю очередь из-за сложности. Больше пользуются языками, которые в основном статически типизированы, но в отдельных местах не гнушаются динамической типизации. Нет ничего криминального в том, чтобы передать значение, как Object и потом проверить его через instanceof. Ну не проверит компилятор это место, ну и ладно, переживём.

И вот в этой перспективе проверяемые и непроверяемые исключения можно сравнить со статически и динамически типизированными языками программирования. Да, непроверяемые исключения это, безусловно, обход типизации языка. Да, проверяемые исключения в теории позволят найти какой-то баг, когда программист был обязан обработать какое-то исключение. Но они же привносят неудобства, которые на практике слишком велики. А с непроверяемыми исключениями всё очень просто и понятно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.