Uso de variables para almacenar valores

Completado

Todos los programas suelen constar de muchos pasos en los que el programa opera en los datos. Como parte de la ejecución de todos esos pasos, es habitual almacenar el resultado intermitente, los datos, en una referencia con nombre. A continuación, puede leer o manipular los datos más adelante. Las referencias con nombre se conocen normalmente como variables.

Variables, enlazar un valor

Las variables se denominan referencias enlazadas a un valor, a las que desea seguir haciendo referencia en el código. En F#, esto se conoce como enlazar un valor. Por lo tanto, lo que hace es asignar, o enlazar, un valor a una referencia con nombre, una variable. Para enlazar un valor, use la let palabra clave , un nombre para la referencia y asígnele un valor, como en el código siguiente:

let name = "Chris"

name es la referencia con nombre y "Chris" es el valor enlazado.

Después de asignar un valor a una variable, no se puede cambiar, es inmutable. El código siguiente no se compilaría y genera un error que indica algo parecido a "error FS0027: Este valor no es mutable".

let name = "Chris"
name <- "Luis" // not allowed

Hacer que sea mutable

Puede cambiar las variables, pero debe indicar que desea que se mutablen. Mediante el uso de la palabra clave mutable en la definición de variable, puede cambiar un valor sin un error de compilación, como en el código siguiente:

let mutable name = "Chris"
name <- "Luis" // this statement is now allowed

Tipos de variables

Existe una variedad de tipos diferentes en F#. Muchos de los tipos tienen que ver con el almacenamiento de números de tamaños diferentes y con o sin decimales. Otros tipos están asociados con la cadena de texto o las variables booleanas. Esta es una lista de tipos que es probable que encuentre al empezar a aprender F#.

Tipo Descripción
booleano los valores posibles son true o false
Int Valores de -2.147.483.648 a 2.147.483.647.
cuerda / cadena Texto Unicode
float, doble Tipo de número de punto flotante de 64 bits.

El tipo se deduce

Al declarar una variable, puede hacerlo con o sin tipo. Si no proporciona un tipo al declarar una variable, el compilador de F# crea una mejor estimación sobre cuál debe ser el tipo por el valor que asigne a la variable. Considere las instrucciones siguientes:

let age = 65 // int
let PI = 3.14 // float
let name = "my name" // string

El compilador deduce cuáles deben ser los tipos y es correcto. También puede especificar de forma explícita cuál quiere que sea el tipo. Para asignar datos, use la sintaxis variableName:<type>, como en este código:

let sum:float = 0.0

A menudo quieres poder imprimir en pantalla. Puede ser por varias razones, como:

  • Salida de la aplicación: la aplicación está realizando algún tipo de cálculo y desea ver la salida.
  • Depuración: Como parte de la depuración de tu código, es posible que debas imprimir el resultado en un momento específico para entender qué está fallando.

Hay otras razones para querer mostrar en la pantalla, pero los dos escenarios anteriores son los más comunes.

¿Cómo se imprimiría información en la pantalla? En F#, hay tres funciones diferentes que puede usar. Son printf, printfn e incluso Console.WriteLine. Entonces, ¿cuál es la diferencia?

  • printf: se imprime en stdout alineado (sin carácter de nueva línea).
  • printfn: se imprime en stdout y agrega un carácter de nueva línea.
  • Console.WriteLine: Esta función es del espacio de nombres System y funciona en todos los lenguajes .NET.

Ahora sabe la diferencia, pero ¿cuál debe usar? Bueno, printf y printfn se consideran más idiomáticos y preferidos en F#.

Formato

Como parte de la impresión en la pantalla, es posible que desee combinar texto y números. O bien, es posible que desee que la salida tenga un formato determinado, por ejemplo, mediante:

  • Argumentos posicionales: para dar formato, puede usar una función de .NET como String.Format, que usa argumentos posicionales como String.Format("My name is {0} and I live in {1}", "Chris", "UK").

  • Interpolación de cadenas: otra manera de combinar variables y texto es usar algo denominado interpolación. Para usarlo, debe anteponer a la cadena un signo $ e indicar los marcadores con corchetes {}. Este es un ejemplo de uso de la interpolación:

    let name = "Luis"
    let company = "Microsoft"
    printfn $"Name: {name}, Company: {company}"
    

    También puede agregar expresiones entre corchetes, de la siguiente manera:

    let firstNumber = 2000
    let secondNumber = 21
    printfn $"The year is: {firstNumber + secondNumber}"
    

    Nota:

    No hay ninguna comprobación de tipos mediante interpolación, por lo que puede parecer sencillo de usar. Asegúrese de combinar las cosas correctamente.

  • Especificadores: también puede usar especificadores de formato como parte de lo que intenta imprimir. El uso de especificadores es la forma más común de aplicar formato a F#. Este es un ejemplo:

    let name = "Chris"
    printf "Hi %s" name
    // prints: Hi Chris
    

    Aquí puede ver cómo se usa el formateador %s para mezclar la primera cadena con la variable name.

    Nota:

    Cuando se usan formateadores como %s o %i, el compilador comprueba los tipos. Si el argumento posicional no es del tipo que ha especificado, produce un error.

Especificadores de formato

Hay muchos especificadores de formato. Estas son algunas de las que es probable que encuentre.

Especificador Descripción Ejemplo
%s Se usa para cadenas y contenido sin escape printf "Hello %s" name
%d, %i Con formato de entero decimal, con signo si el tipo entero básico tiene signo printf "Edad: %i" 65
%b Boolean true o false printf "Setting on: %b" true

Hay más información sobre el formato. Si desea conocer todas las funcionalidades, consulte la documentación de formato en F#.