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:
- A Tour of Go - Inference: https://tour.golang.org/basics/14
No hay comentarios:
Publicar un comentario