F # избегает использования null
, когда это возможно, но оно живет в экосистеме .NET, поэтому не может избежать его полностью.В идеальном мире не было бы null
значений, но иногда они просто нужны.
Например, вам может потребоваться вызвать метод .NET с null
в качестве аргумента, и вам может понадобитьсяпроверьте, был ли результат вызова метода .NET null
.
Способ F # справляется с этим:
Нуль используется при работе с типами, поступающими из .NET (когда у вас есть значениеили аргумент типа, объявленного в .NET, вы можете использовать null
в качестве значения этого типа, вы можете проверить, равно ли оно null
)
Опция необходим при работе с типами F #, поскольку значения типов, объявленные в F #, не могут быть null
(и компилятор запрещает использовать null
в качестве значения этих типов).
В программировании на F # вы будетевероятно, используйте опцию и при работе с типами .NET (если у вас есть контроль над тем, как создаются их значения).Вы просто никогда не создадите значение null
, а затем используете опцию, чтобы гарантировать, что вы всегда будете правильно обрабатывать пропущенные значения.
Это действительно единственный вариант.Если вы хотите неявно просматривать все типы как параметры при доступе к .NET API, почти каждый метод будет выглядеть так:
option<Control> GetNextChild(option<Form> form, option<Control> current);
... программирование с помощью API, как это, было бы довольно болезненным.