9 - Definición de variables por inferencia de tipo

El lenguaje Go es fuertemente tipado, es decir cada vez que definimos una variable debemos indicar que tipo de dato puede almacenar (por el memento hemos visto solo los tipos de datos int y float32, luego veremos que hay otros tipos de variables para guardar un caracter, un conjunto de caracteres un valor lógico etc.)

Si tenemos que definir dos variables enteras y cargarles el valor inicial 10 la sintaxis es:

var valor1, valor2 int
valor1 = 10
valor2 = 10

El lenguaje Go nos permite hacer una definición y carga del valor inicial con una sintaxis simplificada:

valor1 := 10
valor2 := 10

Es importante notar que utilizamos el operador := con esto estamos indicando al compilador de Go que estamos definiendo una variable y que debe inferir de que tipo se trata analizando el valor que aparece a la derecha de :=

Problema 1:

Realizar la carga de dos enteros por teclado. Mostrar la suma y diferencia de los mismos.

Programa: ejercicio028.go

package main

import "fmt"

func main() {
    var valor1, valor2 int
    fmt.Print("Ingrese el primer valor:")
    fmt.Scan(&valor1)
    fmt.Print("Ingrese el segundo valor:")
    fmt.Scan(&valor2)
    suma := valor1 + valor2
    fmt.Println("La suma de los dos valores es:", suma)
    resta := valor1 - valor2
    fmt.Println("La diferencia del primer valor respecto al segundo es:", resta)
}

En este programa hemos definido 4 variables de tipo int: valor1, valor2, suma y resta.

La sintaxis que venimos trabajando es utilizar la palabra clave var seguida de los nombres de las variables a definir y de que tipo son:

    var valor1, valor2 int

La segunda forma simplificada es indicar el nombre de la variable seguida por el operador := y el valor que se almacenará. El compilador de Go identifica que las dos variables "valor1" y "valor2" son de tipo int por lo que define la variable "suma" de tipo int.

La nueva sintaxis resume el empleo de la sintaxis:

    var suma int
    suma = valor1 + valor2

Problema 2:

Se ingresan tres notas de un alumno, si el promedio es mayor o igual a siete mostrar un mensaje "Promocionado". Definir por inferencia el tipo dato para almacenar el promedio

Programa: ejercicio029.go

package main

import "fmt"

func main() {
    var nota1, nota2, nota3 int
    fmt.Print("Ingrese primer nota:")
    fmt.Scan(&nota1)
    fmt.Print("Ingrese segundo nota:")
    fmt.Scan(&nota2)
    fmt.Print("Ingrese tercer nota:")
    fmt.Scan(&nota3)    
    promedio := (float32(nota1) + float32(nota2) + float32(nota3)) / 3
    fmt.Println("Promedio:", promedio)
    if promedio >=7 {
        fmt.Print("Promocionado")
    }   
}

Como queremos que se guarde un valor con coma en la variable promedio convertimos los valores de nota1, nota2 y nota3 a float32:

    promedio := (float32(nota1) + float32(nota2) + float32(nota3)) / 3

El compilador sabe que debe definir una variable llamada promedio de tipo float32.

Es importante recordar de utilizar el operador := para la definición de la variable por inferencia y carga del dato.

Si tratamos de escribir el operador de asignación = se producirá un error sintáctico:

promedio = (float32(nota1) + float32(nota2) + float32(nota3)) / 3

Error de compilación:

.\ejercicio029.go:13: undefined: promedio

Problema propuesto

  • Realizar un programa que solicite la carga por teclado de dos números, si el primero es mayor al segundo informar su suma y diferencia, en caso contrario informar el producto y la división del primero respecto al segundo. Definir variables por inferencia para almacenar la suma, resta, multiplicación y división
Solución

ejercicio030.go

package main

import "fmt"

func main() {
    var num1, num2 int
    fmt.Print("Ingrese primer valor:")
    fmt.Scan(&num1)
    fmt.Print("Ingrese segundo valor:")
    fmt.Scan(&num2)
    if num1 > num2 {
        suma := num1 + num2
        diferencia := num1 - num2
        fmt.Println("La suma de los dos valores es ", suma)
        fmt.Println("La diferencia de los dos valores es ", diferencia)
    } else {
        producto := num1 * num2
        division := float32(num1) / float32(num2)
        fmt.Println("El producto de los dos valores es ", producto)
        fmt.Print("La división de los dos valores es ",division)
    }
}