Прав ли я, если предположить, что Java-Optional не имеет большого количества дел с C ++ 17-Optional?
Они похожи в том, что они типа модели одинаковыПонятие - это значение, которое может отсутствовать, но их интерфейсы очень разные. Я не очень разбираюсь в C ++, но, глядя на эту страницу , я вижу, что std::optional
в C ++ намного менее функциональный , чем Optional
.
* 1012 в Java. *
Или это снова «Монады», то, что никто не может объяснить, поняв это?
Найди дальше! Optional
в Java по сути является монадой. Имея методы Optional.of
и Optional.flatMap
, Java Optional
становится монадой. В необязательном C ++ отсутствует соответствующий метод flatMap
, из-за чего он не является монадой :(
IMO, std::optional
не имеющий метода flatMap
является фундаментальным для двух рассматриваемых типов. flatMap
имеет подпись:
<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
По существу позволяет составлять Optional
с. Вы можете иметь Optional<String>
, применить функцию, которая возвращает еще один Optional<T>
, а затем верните Optional<T>
.
Вот статья о монадах, которая может помочь. Монады не так уж и страшны. Ключевая особенность - это функция с такой же сигнатуройкак flatMap
показано выше. Если вы видите что-то подобное, есть большая вероятность, что вы нашли монаду! Stream
, следовательно, является монадой.