Compartir a través de


Valores (F#)

En F#, los valores 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 enlazar 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

La inferencia de tipos de un valor se realiza a partir 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 de literal. Por consiguiente, en el ejemplo anterior, la inferencia de tipos realizada por el compilador da como resultado que el tipo de b es unsigned int, y que el tipo de a es int. El tipo de un valor de función viene determinado a partir del valor devuelto en el cuerpo de la función. Para obtener más información sobre los tipos de valor de las funciones, vea Funciones (F#). Para obtener más información sobre tipos de literales, vea Literales (F#).

¿Por qué son inmutables?

Los valores inmutables son aquellos que no se pueden cambiar durante toda la ejecución de un programa. Si está habituado a utilizar 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 de multithreading, resulta complicado administrar las variables mutables compartidas, puesto 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 pase a otra función.

En los lenguajes funcionales puros, no hay ninguna variable y las funciones se comportan estrictamente como funciones matemáticas. En aquellos casos en que el código de un lenguaje de procedimientos utiliza 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 es precisamente este razonamiento más estricto 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. Así pues, es probable que el código funcional sea más fácil de depurar que el código de procedimientos ordinario.

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

Variables mutables

Se puede utilizar la palabra clave mutable para especificar una variable que se puede cambiar. En F#, las variables mutables deben tener, en general, 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. Sin embargo, 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

Temas relacionados

Título

Descripción

Enlaces let (F#)

Proporciona información sobre cómo utilizar la palabra clave let para enlazar nombres a los valores y las funciones.

Funciones (F#)

Proporciona información general sobre las funciones en F#.

Vea también

Conceptos

Valores NULL (F#)

Otros recursos

Referencia del lenguaje F#