ValoresValues

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.Values in F# are quantities that have a specific type; values can be integral or floating point numbers, characters or text, lists, sequences, arrays, tuples, discriminated unions, records, class types, or function values.

Enlace de un valorBinding a Value

El término enlace significa asociar un nombre a una definición.The term binding means associating a name with a definition. La palabra clave let enlaza un valor, como en los ejemplos siguientes:The let keyword binds a value, as in the following examples:

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.The type of a value is inferred from the definition. Para un tipo primitivo, como un número entero o de punto flotante, el tipo se determina a partir del tipo del literal.For a primitive type, such as an integral or floating point number, the type is determined from the type of the 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.Therefore, in the previous example, the compiler infers the type of b to be unsigned int, whereas the compiler infers the type of a to be int. El tipo de un valor de función se determina a partir del valor devuelto en el cuerpo de la función.The type of a function value is determined from the return value in the function body. Para más información sobre los tipos de valor de función, vea Funciones.For more information about function value types, see Functions. Para más información sobre los tipos literales, vea Literals (Literales).For more information about literal types, see Literals.

De forma predeterminada, el compilador no emite diagnósticos sobre los enlaces no utilizados.The compiler does not issue diagnostics about unused bindings by default. Para recibir estos mensajes, habilite la advertencia 1182 en el archivo del proyecto o al invocar al compilador (vea --warnon en Opciones del compilador).To receive these messages, enable warning 1182 in your project file or when invoking the compiler (see --warnon under Compiler Options).

¿Por qué inmutables?Why Immutable?

Los valores inmutables son valores que no se pueden cambiar durante el transcurso de la ejecución de un programa.Immutable values are values that cannot be changed throughout the course of a program's execution. 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.If you are used to languages such as C++, Visual Basic, or C#, you might find it surprising that F# puts primacy over immutable values rather than variables that can be assigned new values during the execution of a program. Los datos inmutables son un elemento importante de la programación funcional.Immutable data is an important element of functional programming. En un entorno multiproceso, resulta complicado administrar las variables mutables compartidas, dado que pueden modificarlas muchos subprocesos diferentes.In a multithreaded environment, shared mutable variables that can be changed by many different threads are difficult to manage. 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.Also, with mutable variables, it can sometimes be hard to tell if a variable might be changed when it is passed to another function.

En los lenguajes funcionales puros, no hay variables y las funciones se comportan estrictamente como funciones matemáticas.In pure functional languages, there are no variables, and functions behave strictly as mathematical functions. 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.Where code in a procedural language uses a variable assignment to alter a value, the equivalent code in a functional language has an immutable value that is the input, an immutable function, and different immutable values as the output. Esta rigidez matemática permite un razonamiento más estricto sobre el comportamiento del programa.This mathematical strictness allows for tighter reasoning about the behavior of the program. 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.This tighter reasoning is what enables compilers to check code more stringently and to optimize more effectively, and helps make it easier for developers to understand and write correct code. Por tanto, es probable que el código funcional sea más fácil de depurar que el código de procedimientos ordinario.Functional code is therefore likely to be easier to debug than ordinary procedural code.

Aunque F# no es un lenguaje funcional puro, admite plenamente la programación funcional.F# is not a pure functional language, yet it fully supports functional programming. 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.Using immutable values is a good practice because doing this allows your code to benefit from an important aspect of functional programming.

Variables mutablesMutable Variables

Se puede usar la palabra clave mutable para especificar una variable que se puede cambiar.You can use the keyword mutable to specify a variable that can be changed. En F#, en general las variables mutables deben tener un ámbito limitado, ya sea como campo de un tipo o bien como valor local.Mutable variables in F# should generally have a limited scope, either as a field of a type or as a local value. Las variables mutables con un ámbito limitado son más fáciles de controlar y es menos probable que se modifiquen de manera incorrecta.Mutable variables with a limited scope are easier to control and are less likely to be modified in incorrect ways.

Se puede asignar un valor inicial a una variable mutable mediante la palabra clave let de la misma manera que se define un valor.You can assign an initial value to a mutable variable by using the let keyword in the same way as you would define a value. Pero la diferencia reside en que, posteriormente, se pueden asignar nuevos valores a las variables mutables mediante el operador <-, como en el ejemplo siguiente.However, the difference is that you can subsequently assign new values to mutable variables by using the <- operator, as in the following example.

let mutable x = 1
x <- x + 1

Los valores mutable marcados se pueden promover 'a ref automáticamente a si se capturan mediante un cierre, incluidos los formularios que crean seq cierres, como los generadores.Values marked mutable may be automatically promoted to 'a ref if captured by a closure, including forms that create closures, such as seq builders. Si desea recibir una notificación cuando esto suceda, habilite la advertencia 3180 en el archivo del proyecto o al invocar al compilador.If you wish to be notified when this occurs, enable warning 3180 in your project file or when invoking the compiler.

TítuloTitle DESCRIPCIÓNDescription
Enlaces letlet Bindings Proporciona información sobre el uso let de la palabra clave para enlazar nombres a valores y funciones.Provides information about using the let keyword to bind names to values and functions.
FuncionesFunctions Proporciona información general sobre las funciones en F#.Provides an overview of functions in F#.

Vea tambiénSee also