Я пытаюсь понять причины разной семантики Option/Optional, возможно, в 3 наиболее используемых реализациях в экосистеме Java: Java 8, Functional Java и Guava.Различные семантики Option/Option в Java
Учитывая следующие три фрагмента.
java.util.Optional.of(100).map(i -> null)
РезультатыOptional.empty
.fj.data.Option.some(100).map(i -> null)
РезультатыSome(null)
.com.google.common.base.Optional.of(100).transform(i -> null)
результатыNullPointerException
.
В чем причина 3 выбора? Если это целесообразно, что можно считать наиболее «чистым» или «правильным» с точки зрения функционального программирования? Например, с точки зрения просмотра Option
типа монады, что было бы наиболее правильным; или что можно считать наиболее сложным? Было бы также интересно узнать, как это обрабатывается на функциональных языках, которые допускают нули.
Различной Цель кодирования (оптимизировать, безопасный или без аварии) Я думаю, вы должны прочитать, например, Java хорошая практика книги. Например, избегайте null при возврате списка, вы должны вернуть emptyList. Исключение должно оставаться как их имя, Исключения. – Destrif
По той же причине, почему C# и Java не совсем равны. Различные разработчики с разными мнениями, как «это» должно работать. Спросить _us_ почему они так странно. – Tom
@Tom немного расширил вопрос, чтобы быть более конкретным – hgrey