Continuamos con la serie de post sobre Go(lang) y la declaración de funciones.
En ésta ocasión haremos una serie de ejemplos con funciones.
Pero antes, ¿Cuál es la diferencia entre funciones y procedimientos?
- Un procedimiento no devolverá ningún valor.
- Una función deberá devolver al menos un valor.
Go(lang) nos permitirá no solo devolver un valor en una función, sino más de dos valores.
func sumaResta(x, y int32) (int32, int32) { return (x + y), (x - y) }
Se puede observar que los valores de regreso son el resultado de la suma y resta.
// Asignamos los valores a las variables opr1 y opr2 var opr1, opr2 = sumaResta(3, 2)
Mostramos los resultados en pantalla:
// Imprimimos en pantalla los resultados fmt.Printf("Suma = %d , Resta = %d\n", opr1, opr2)
Si definimos una función que devuelva más de dos valores:
func sumaRestaMultiplica(x, y int32) (int32, int32, int32) { return (x + y), (x - y), (x * y) }
Como se puede observar tenemos tres operaciones a realizar: suma, resta y multiplicación.
Asignando valores a las variables:
// Asignamos los valores de suma, resta y multiplicación var sumaF, restaF, multF = sumaRestaMultiplica(3, 4)
Imprimimos los resultados de las operaciones(suma, resta y multiplicación) en pantalla:
fmt.Printf("Suma(3,4) = %d, tipo: %T\n", sumaF, sumaF) // 7 fmt.Printf("Resta(3,4) = %d, tipo: %T\n", restaF, restaF) // -1 fmt.Printf("Producto(3,4) = %d, tipo: %T\n", multF, multF) // 12
¿Se podrá devolver valores con distinto tipo? En Go(lang) si se puede. Miremos el siguiente bloque de código:
func multDivision(x, y int) (int, string) { if y > x { return x / y, "Division" } else { return x * y, "Multiplicacion" } }
Como se observa, en la función devolvemos una operación de tipo int (multiplicación o división) y una cadena de texto de tipo string. En este caso la cadena devolverá la operación realizada de acuerdo a ciertas condiciones.
Asignamos los valores y los imprimimos en pantalla:
// Asignamos valores var valor, operacion = multDivision(x, y) // Imprimimos en pantalla los resultados obtenidos fmt.Println("x=", x, "y=", y) fmt.Printf("Operacion = %v , Resultado: %v\n", operacion, valor)
También podemos devolver un valor sin tener que colocar el return segudo de la variable que tiene el valor a devolver.
func nada(numero int) (z int) { z = numero * 3 return }
Imprimimos en pantalla el valor:
fmt.Println("Nada(5) = ", nada(5)) fmt.Println("Nada(222) = ", nada(222)) /* Salida: Nada(5) = 15 Nada(222) = 666 */
En este ejmplo definiremos una función que recibirá una indefinida cantidad de parámetros y realizará una sumatoria de los mismos.
func calculo(numero ...int) { total := 0 for _, num := range numero { fmt.Println("Numero = ", num) total += num } fmt.Println("Total = ", total) }
Invocamos la función con distinto número de entradas:
calculo(1, 2, 3, 4) calculo(1, 2) /* Resultado: Numero = 1 Numero = 2 Numero = 3 Numero = 4 Total = 10 Numero = 1 Numero = 2 Total = 3 Total = 15 */
Go(lang) tiene ciertas peculiaridades que nos ayudan bastante. En próximos post veremos más ejemplos.
Comentarios
Publicar un comentario