domingo, 21 de octubre de 2018

Inferencia en Go

En el capítulo dedicado a las variables en Go aprendimos que se ha de especificar, de forma explícita, el tipo de valores que va a almacenar la variable.

Pero Go también nos permite definir, de forma implícita, variables, sin especificar el tipo de valor que ha de almacenar. Esta forma de declarar variables se denomina inferencia.

¿Qué es la inferencia?

La inferencia permite declarar variables en el código sin necesidad de especificar el tipo de valores que va almacenar. Esto se consigue inicializando la variable con un valor en el momento de la declaración. De esta manera, el compilador de Go, automáticamente, identificará el tipo del valor que se se quiere asignar y, por detrás, se encargará de declarar la variable con el tipo correspondiente.

var cadena = "Territorio Go"

Podemos simplificar esta declaración, omitiendo la palabra clave var y utilizando el operador de asignación "dos punto igual" (:=). El compilador de Go, automáticamente, sabrá que es una variable y gestionará la inferencia.

cadena := "Territorio Go"

Si necesitamos declarar varias variables, con distintos tipos de valores, podemos realizarlo en la misma línea:

nombre, edad, esCasado := "Rafael", 47, true

Ejemplo

El siguiente ejemplo ilustra los conceptos de la inferencia.

package main

import "fmt"

func main() {
   // Declaracion simple
   var cadena = "Territorio Go"

   // Declaracion abreviada
   entero := 13

   // Declaracion multiple
   nombre, edad, esCasado := "Rafael", 47, true

   fmt.Printf("cadena: %v (%T)\n", cadena, cadena)
   fmt.Printf("entero: %v (%T)\n", entero, entero)
   fmt.Printf("nombre: %v (%T)\n", nombre, nombre)
   fmt.Printf("edad: %v (%T)\n", edad, edad)
   fmt.Printf("esCasado: %v (%T)\n", esCasado, esCasado)
}

El resultado será el siguiente:

$ go run inferencia.go cadena: Territorio Go (string) entero: 13 (int) nombre: Rafael (string) edad: 47 (int) esCasado: true (bool)

Pros y contras de la inferencia

Si vienes de otros lenguajes de programación, como JavaScript o Python, la inferencia suele ser una práctica muy común, ya que es muy cómodo y ahorras tener que escribir código. Sin embargo, es una buena práctica no usar la inferencia y utilizar el tipado de las variables y constantes. Ello se debe a que, en un futuro, te enfrentarás a código más complejo, y el saber exactamente y de antemano qué tipo de dato tiene una variable nos va a ahorrar muchos quebraderos de cabeza, especialmente cuando hay que "matchear" o hacer coincidir los datos en modelos de datos. Es un consejo personal mío, y es también una buena práctica. La decisión es tuya.

Enlaces de interés:

No hay comentarios:

Publicar un comentario