Опция Null Vs в F # - PullRequest
       3

Опция Null Vs в F #

2 голосов
/ 07 марта 2011

У меня проблемы с пониманием сосуществования «ноль» и «Option» в F #.В книге я прочитал, что нулевое значение не является правильным значением в F #, потому что таким образом F # устраняет чрезмерную проверку нуля.Но он все еще допускает нулевые инициализированные ссылки в F #.Другими словами, вы можете иметь нулевые значения, но у вас нет оружия для защиты.Почему бы не полностью заменить нули с помощью параметров.Это из-за проблем совместимости с библиотеками .NET или языками, которые все еще там?Если да, можете ли вы привести пример, показывающий, почему его нельзя заменить на Option?

1 Ответ

7 голосов
/ 07 марта 2011

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, как это, было бы довольно болезненным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...