Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los valores de F# son cantidades que tienen un tipo específico; los valores pueden ser números enteros o de punto flotante, caracteres o texto, listas, secuencias, matrices, tuplas, uniones discriminadas, registros, tipos de clase o valores de función.
Enlazar un valor
El término enlace significa asociar un nombre a una definición. La let palabra clave enlaza un valor, como en los ejemplos siguientes:
let a = 1
let b = 100u
let str = "text"
// A function value binding.
let f x = x + 1
El tipo de un valor se deduce de la definición. Para un tipo primitivo, como un número entero o de punto flotante, el tipo se determina a partir del tipo del literal. Por lo tanto, en el ejemplo anterior, el compilador deduce el tipo de b para ser unsigned int, mientras que el compilador deduce el tipo de a para ser int. El tipo de un valor de función se determina a partir del valor devuelto en el cuerpo de la función. Para obtener más información sobre los tipos de valor de función, consulte Functions. Para obtener más información sobre los tipos literales, vea Literales.
El compilador no emite diagnósticos sobre enlaces sin usar de forma predeterminada. Para recibir estos mensajes, habilite la advertencia 1182 en el archivo del proyecto o al invocar el compilador (consulte --warnonOpciones del compilador).
¿Por qué inmutable?
Los valores inmutables son valores que no se pueden cambiar durante la ejecución de un programa. Si se usa para lenguajes como C++, Visual Basic o C#, es posible que le resulte sorprendente que F# ponga primacía sobre valores inmutables en lugar de variables que se puedan asignar nuevos valores durante la ejecución de un programa. Los datos inmutables son un elemento importante de la programación funcional. En un entorno multiproceso, las variables mutables compartidas que pueden cambiar muchos subprocesos diferentes son difíciles de administrar. Además, con variables mutables, a veces puede resultar difícil saber si se puede cambiar una variable cuando se pasa a otra función.
En lenguajes funcionales puros, no hay variables y las funciones se comportan estrictamente como funciones matemáticas. Cuando el código de un lenguaje de procedimientos usa una asignación de variable para modificar un valor, el código equivalente de un lenguaje funcional tiene un valor inmutable que es la entrada, una función inmutable y diferentes valores inmutables como salida. Esta estrictaidad matemática permite un razonamiento más estricto sobre el comportamiento del programa. Este razonamiento más estricto es lo que permite a los compiladores comprobar el código de forma más estricta y optimizar de forma más eficaz, y facilita a los desarrolladores comprender y escribir código correcto. Por lo tanto, es probable que el código funcional sea más fácil de depurar que el código de procedimiento normal.
F# no es un lenguaje funcional puro, pero es totalmente compatible con la programación funcional. El uso de valores inmutables es un procedimiento recomendado porque esto permite que el código se beneficie de un aspecto importante de la programación funcional.
Variables mutables
Puede usar la palabra clave mutable para especificar una variable que se puede cambiar. Las variables mutables en F# normalmente deben tener un ámbito limitado, ya sea como un campo de un tipo o como un valor local. Las variables mutables con un ámbito limitado son más fáciles de controlar y son menos probables que se modifiquen de maneras incorrectas.
Puede asignar un valor inicial a una variable mutable mediante la palabra clave de la let misma manera que definiría un valor. Sin embargo, la diferencia es que posteriormente puede asignar nuevos valores a variables mutables mediante el <- operador , como en el ejemplo siguiente.
let mutable x = 1
x <- x + 1
Los valores marcados mutable se pueden promover automáticamente a 'a ref si se capturan mediante un cierre, incluidos los formularios que crean cierres, como seq generadores. Si desea recibir una notificación cuando esto ocurra, habilite la advertencia 3180 en el archivo del proyecto o al invocar al compilador.
Temas relacionados
| Título | Descripción |
|---|---|
| let Bindings | Proporciona información sobre el uso de la let palabra clave para enlazar nombres a valores y funciones. |
| Funciones | Proporciona información general sobre las funciones en F#. |