Опциональные типы
От: x-code  
Дата: 18.02.17 18:28
Оценка:
Опицональные типы (Optional, Maybe)
это типы которые могут принимать все значения некоторого типа T ( Some<T> ), а также специальное значение None, означающее "отсутствие" данных вообще или нечто подобное.

Несколько вопросов

1. Является ли нулевая ссылка на объект эквивалентом None? Можно ли сказать что нуллабельные ссылочные типы это полноценная реализация опциональных типов?

2. Если у объекта некоторого класса имеется свое собственное, определенное программистом "недействительное" состояние, то может ли это быть то же самое что и None? Кажется что это разные вещи, по крайней мере в сравнении с "нулевой ссылкой": в случае нулевой ссылки объекта просто нет, поэтому невозможно обратиться ни к каким полям и т.д.; в случае пользовательского недействительного состояния недействительность чисто логическая, при этом память под объект есть, поля есть и к ним можно обратиться, можно перевести объект в действительное состояние вызвав какой-то метод и т.д.

Но в то же время такое "пользовательское недействительное состояние" ближе к классической реализации Optional<T>, где для хранения признака None просто заводится булевский флаг, при этом память под объект Some<T> физически также присутствует.

3. В частности, для чисел с плавающей точкой, является ли NaN эквивалентом None? Или это логически разные понятия и их не следует смешивать? Если разные то почему?

4. Какой физический смысл у многократного закручивания опционала в опционал? Optional<Optional<T>>, Optional<Optional<Optional<T>>> и т.п.? Где такое может встретиться и для чего?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.