Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Значения в F# — это числа, имеющие определенный тип; значения могут быть целочисленными или числами с плавающей запятой, символами или текстом, списками, последовательности, массивами, кортежами, дискриминированными объединениями, записями, типами классов или значениями функций.
Привязка значения
Привязка термина означает связывание имени с определением. Ключевое let слово привязывает значение, как показано в следующих примерах:
let a = 1
let b = 100u
let str = "text"
// A function value binding.
let f x = x + 1
Тип значения выводится из определения. Для примитивного типа, например целочисленного или плавающего числа, тип определяется из типа литерала. Таким образом, в предыдущем примере компилятор определяет тип b , который должен быть unsigned int, в то время как компилятор определяет тип a , который должен быть int. Тип значения функции определяется из возвращаемого значения в теле функции. Дополнительные сведения о типах значений функций см. в разделе "Функции". Дополнительные сведения о типах литерала см. в разделе Литералы.
Компилятор по умолчанию не выдает диагностику неиспользуемых привязок. Чтобы получить эти сообщения, включите предупреждение 1182 в файле проекта или при вызове компилятора (см. в разделе --warnon"Параметры компилятора").
Почему неизменяемо?
Неизменяемые значения — это значения, которые нельзя изменить на протяжении всего процесса выполнения программы. Если вы используете для таких языков, как C++, Visual Basic или C#, может оказаться удивительно, что F# ставит приоритет над неизменяемыми значениями, а не переменными, которые могут быть назначены новыми значениями во время выполнения программы. Неизменяемые данные являются важным элементом функционального программирования. В многопоточной среде общие изменяемые переменные, которые могут быть изменены различными потоками, трудно управлять. Кроме того, с изменяемыми переменными иногда бывает трудно определить, может ли переменная быть изменена при передаче в другую функцию.
На чистых функциональных языках переменные отсутствуют, а функции ведут себя строго как математические функции. Если код в процедурном языке использует назначение переменной для изменения значения, эквивалентный код в функциональном языке имеет неизменяемое значение, которое является входной, неизменяемой функцией и различными неизменяемыми значениями в качестве выходных данных. Эта математическая строгость позволяет более жестко подумать о поведении программы. Это более жесткое обоснование заключается в том, что позволяет компиляторам более строго проверять код и оптимизировать более эффективно, и помогает разработчикам проще понимать и писать правильный код. Поэтому функциональный код, скорее всего, проще отлаживать, чем обычный процедурный код.
F# не является чистым функциональным языком, но полностью поддерживает функциональное программирование. Использование неизменяемых значений является хорошей практикой, так как это позволяет коду воспользоваться важным аспектом функционального программирования.
Изменяемые переменные
Ключевое слово mutable можно использовать для указания переменной, которую можно изменить. Изменяемые переменные в F# обычно должны иметь ограниченную область либо как поле типа, либо как локальное значение. Изменяемые переменные с ограниченной областью проще управлять и, скорее всего, будут изменены неправильно.
Начальное значение можно назначить переменной с помощью let ключевого слова таким же образом, как и для определения значения. Однако разница заключается в том, что впоследствии можно назначить новые значения изменяемым переменным с помощью <- оператора, как показано в следующем примере.
let mutable x = 1
x <- x + 1
Значения, помеченные mutable , могут быть автоматически повышены, 'a ref если они фиксируются закрытием, включая формы, которые создают закрытия, например seq построителей. Если вы хотите получать уведомления об этом, включите предупреждение 3180 в файле проекта или при вызове компилятора.
Связанные разделы
| Название | Описание |
|---|---|
| разрешить привязкам | Предоставляет сведения об использовании ключевого let слова для привязки имен к значениям и функциям. |
| Функции | Общие сведения о функциях в F#. |