Концепция опционалов не нова и проста как банный лист. Это всего лишь перечисление(enum):
(Полную реализацию можно глянуть
тут)
enum Optional<Wrapped>: ExpressibleByNilLiteral {
// The compiler has special knowledge of Optional<Wrapped>, including the fact
// that it is an `enum` with cases named `none` and `some`.
/// The absence of a value.
///
/// In code, the absence of a value is typically written using the `nil`
/// literal rather than the explicit `.none` enumeration case.
case none
/// The presence of a value, stored as `Wrapped`.
case some(Wrapped)
/// Creates an instance that stores the given value.
@_transparent
public init(_ some: Wrapped) { self = .some(some) }
//...
НО люди по своей природе не любят сложностей, даже если сама идея достаточно хорошо. Никто не хочет каждый раз писать
Optional<MyClass>.some(myObj)
и тому сопутствующее...
Тут та и на сцену выходит язык
Swift, где концепция Опционалов выведена в абсолют и поддерживается на уровня компилятора. А что же это даёт? Достаточно много удобств: не нужно писать полный тип, добавили соответсвующие литералы("!", "?", "nil") и в целом работа с перечислением(
enum Optional
) сделана в виде обычного стандартного типа, Аля
Int
какой-нибудь.
---------------------------------------
Зачем нужен Optional и почему над null нельзя...?
Нельзя потому-что по своей природе null указывает на указатель который никуда не указывает в данный момент. Optional же позволяет растянуть эту концепцию не только на указатели(значит на ссылочные типы), но и на самые обычные типы(типы значения).