Valores

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.

Enlace de un valor

El término enlace significa asociar un nombre a una definición. La palabra clave let 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 infiere 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 tanto, en el ejemplo anterior, el compilador infiere que el tipo de b es unsigned int, mientras que el compilador infiere que el tipo de a es int. El tipo de un valor de función se determina a partir del valor devuelto en el cuerpo de la función. Para más información sobre los tipos de valor de función, vea Funciones. Para más información sobre los tipos literales, vea Literals (Literales).

El compilador no genera diagnósticos sobre los enlaces sin usar de forma predeterminada. Para recibir estos mensajes, habilite la advertencia 1182 en el archivo de proyecto o al invocar el compilador (vea --warnon en Opciones del compilador).

¿Por qué inmutables?

Los valores inmutables son valores que no se pueden cambiar durante el transcurso de la ejecución de un programa. Si está habituado a usar lenguajes como C++, Visual Basic o C#, le resultará sorprendente que F# dé prioridad a los valores inmutables y no a las variables, a las que se pueden 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, resulta complicado administrar las variables mutables compartidas, dado que pueden modificarlas muchos subprocesos diferentes. Además, con las variables mutables, a veces puede resultar difícil saber si existe la posibilidad de que una variable haya cambiado cuando se pasa a otra función.

En los 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 distintos valores inmutables como salida. Esta rigidez matemática permite un razonamiento más estricto sobre el comportamiento del programa. Y este razonamiento más estricto es lo que permite a los compiladores comprobar el código de una manera más rigurosa y optimizar con mayor eficacia, además de hacer que a los desarrolladores de software les resulte más fácil entender y escribir código correcto. Por tanto, es probable que el código funcional sea más fácil de depurar que el código de procedimientos ordinario.

Aunque F# no es un lenguaje funcional puro, admite plenamente la programación funcional. El uso de valores inmutables es una práctica correcta porque permite que el código se beneficie de un aspecto importante de la programación funcional.

Variables mutables

Se puede usar la palabra clave mutable para especificar una variable que se puede cambiar. En F#, en general las variables mutables deben tener un ámbito limitado, ya sea como campo de un tipo o bien como valor local. Las variables mutables con un ámbito limitado son más fáciles de controlar y es menos probable que se modifiquen de manera incorrecta.

Se puede asignar un valor inicial a una variable mutable mediante la palabra clave let de la misma manera que se define un valor. Pero la diferencia reside en que, posteriormente, se pueden asignar nuevos valores a las variables mutables mediante el operador <-, como en el ejemplo siguiente.

let mutable x = 1
x <- x + 1

Es posible que los valores marcados como mutable se promuevan automáticamente a 'a ref si los captura una clausura, incluso los formularios que crean clausuras, como los generadores seq. Si quiere recibir una notificación cuando ocurra esto, habilite la advertencia 3180 en el archivo de proyecto o al invocar al compilador.

Title Descripción
Enlaces let Proporciona información sobre cómo usar la palabra clave let para enlazar nombres a los valores y las funciones.
Funciones Proporciona información general sobre las funciones en F#.

Consulte también