Ну NPE - это и есть "что-то не получилось". Рассказать по существу можно, если мы заранее позаботились проверить, получилось или нет. А если нет? Т.е., скажем, мы имеем метод, который, не знаю, нам число пи считает. И там внутри у него почему-то сломался думатель. И мы, допустим, по-умному сказали - пусть вернёт не Number, а Option какой-нибудь. И вот он вернул None. Мы в этом случае что будет сделать? Напишем - "не могу продолжать - мне не дают число пи, а дают None". А почему не дают? Неизвестно. Т.е. практически мы делаем немногим большее, чем делает бектрейс. А как сделать больше?
Т.е. либо надо каждую функцию оснастить специальной рассказывалкой (что в общем случае невозможно - есть же библиотеки), либо в конце концов будут всё равно случаи вида "что-то не так, а что - неизвестно, вот вам бектрейс".
None особой пользы не приносит в данном случае; она только показывать может, что это, давай ошибку обрабатывай. Лучше что-то более детальное, разумеется.
На практике это нередко "что-то не получилось, но забыли такой вариант обработать и пытаемся вызвать метод". Т.е. необязательно не получилось и ничего нельзя было поделать, может и можно было, но вот забыли. А Option просто не дает забыть обрабатывать такие случаи.
Ну как не даёт - вроде как Java не даёт не обрабатывать эксепшены, так тут же начинают писать catch(Exception e) { /* TODO */ } и так прямо в продакшен и пихают.
А, кстати, NPE относится к тем checked exceptions? Java разве заставляет все обращения к методам и полям в try-catch заворачивать на случай NPE?
То, что ленивый человек может замять обработку None явно (каким-то аналогом catch(Exception e) { /* TODO */ }), это конечно правда, но все ж это не то же самое, что просто забыть.
В общем да, с опшеном тa же фигня получается, если народ пишет option.get(). В этих всех скальных классах есть некоторое количество лишних функций, делающих фп несколько бессмысленным.
no subject
Date: 2014-07-16 11:42 pm (UTC)Т.е. либо надо каждую функцию оснастить специальной рассказывалкой (что в общем случае невозможно - есть же библиотеки), либо в конце концов будут всё равно случаи вида "что-то не так, а что - неизвестно, вот вам бектрейс".
no subject
Date: 2014-07-17 12:23 am (UTC)no subject
Date: 2014-07-17 07:47 am (UTC)На практике это нередко "что-то не получилось, но забыли такой вариант обработать и пытаемся вызвать метод". Т.е. необязательно не получилось и ничего нельзя было поделать, может и можно было, но вот забыли. А Option просто не дает забыть обрабатывать такие случаи.
no subject
Date: 2014-07-17 08:06 am (UTC)no subject
Date: 2014-07-17 08:31 am (UTC)То, что ленивый человек может замять обработку None явно (каким-то аналогом catch(Exception e) { /* TODO */ }), это конечно правда, но все ж это не то же самое, что просто забыть.
no subject
Date: 2014-07-17 09:00 pm (UTC)