• 08/09/2024 1:10 AM

Funciones Parte I

porJesus Flores

Ago 26, 2021

En programación llamamos función a un grupo de instrucciones en un programa; con el propósito de realizar una tarea específica. Visto de una manera mas simple en alto nivel, una función toma una entrada y retorna una salida.

Las funciones permiten convertir un bloque de instrucciones de uso común en un solo componente.

La función en Go más popular es la función main (), que se utiliza en todos los programas.

Crear una Función

La estructura de una función se compone al inicio de la palabra reservada func, seguida del nombre que deseamos asignar a la función, un par de paréntesis () y finalmente el bloque que contiene nuestro código.

En el siguiente ejemplo vemos la forma más básica de declarar una función, la llamaremos PrimeraFuncion; no recibe ningún parámetro y no retorna ningún valor, simplemente imprime un mensaje en consola.

package main

import "fmt"

// PrimeraFuncion imprime un mensaje
func PrimeraFuncion () {
	fmt.Println("Hola Mundo")
}

func main() {
	PrimeraFuncion ()
}

Pasando parámetros

Las funciones reciben información mediante argumentos o parámetros. Se puede decir que un parámetro es una variable. Los parámetros se especifican justo después del nombre de la funciones, dentro de los paréntesis, es posible agregar n argumentos como deseemos, cada uno separado por una coma.

Veamos el ejemplo, donde la función espera dos parámetros de tipo int, de esta manera cuando se llama la función sumar, le enviamos dos valores enteros(40 y 20).

package main

import "fmt"

// sumar acepta dos parametros de tipo entero
func sumar(a int, b int) {
	total := 0
	total = a + b
	fmt.Println(total)
}

func main() {
	// llamamos a la función sumar y pasamos argumentos
	sumar(40, 20)
}

Importante: si la función comienza con una letra mayúscula se exportará a otros paquetes, en cambio si la función comienza con minúscula no podrá exportarse a otros paquetes, sin embargo puede ser llamada dentro del mismo paquete.

Retornando un valor

Continuando con la función sumar, ahora vamos a tomar los dos parámetros asignados y devolver un valor entero, representado en una variable llamada total.
Es necesario tener en cuenta que la sentencia return es obligatoria si hemos declarado un valor de retorno en la firma de la función.

package main

import "fmt"

// sumar estamos indicando en la firma que devuelve un entero
func sumar(a int, b int) int {
	total := 0
	total = a + b
	return total
}

func main() {
	// asignamos el valor de retorno a una variable
	suma := sumar(40, 20)
	fmt.Println(suma)
}

Importante: Los tipos de los valores de entrada y salida deben coincidir con la firma de la función. Si modificamos el programa y pasamos un valor de tipo string en el argumento, una excepción será lanzada.

Regresar valores con Nombre

En go es posible asignar un nombre a los valores de retorno de una función desde la firma de la función, como vemos a continuación desde la firma se indica el nombre de la variable area del tipo entero a retornar.

package main

import "fmt"

func rectangulo(b int, h int) (area int) {
	area = b * h
	return // con solo escribir return será devuelto el valor de area
}

func main() {
	fmt.Println("Area: ", rectangulo(20, 30))
}

Regresar múltiples valores

Las funciones en golang pueden regresar múltiples valores, lo cual es útil en muchos casos, por ejemplo si en una función deseamos regresar el valor de la función y si ocurrió algún error. Veamos el mismo ejemplo anterior con la diferencia que ahora también retornamos el perímetro:

package main

import "fmt"

func rectangulo(b int, h int) (area int, perimetro int) {
	perimetro= 2 * (b + h)
	area = b * h
	return // regresamos los valores sin especificar sus nombres
}

func main() {
	var a, p int
	a, p = rectangulo(40, 20)
	fmt.Println("Area:", a)
	fmt.Println("Perimetro:", p)
}

Con este ejemplo terminamos la parte 1 de funciones, en el siguiente post de funciones trabajaremos con paso de referencias, funciones anónimas y más.

por Jesus Flores

Ingeniero de Software y Agile Coach

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *