Cuando programamos el número de lineas de código crece rápidamente, cada nueva funcionalidad, chequeo o elemento de juego requiere nuevas variables, comprobaciones y algoritmos que la gestionen.

Las funciones son un recurso muy útil y extremadamente versátil que nos ayuda a reutilizar código y mantenerlo más ordenado y legible.

Con las funciones «empaquetamos» trozos de código que realizan una función específica.

Como no hay nada mejor que un ejemplo veamos el siguiente código utilizado en la entrada anterior:

print("www.altaruru.com lua - basics - bucles")
print("mini juego - adivina un número")
print("hola, he pensado un número del 1 al 10")
print("intenta adivinarlo! :-D")
 
adivina = 7
numero = 0
while(adivina ~= numero)
do
	print("dime tu numero")
	numero=io.read("*n")
end
print("enhorabuena, acertaste!") 

Vamos a crear una función que muestre los mensajes de inicio:

function bienvenida()
	print("www.altaruru.com lua - basics - bucles")
	print("mini juego - adivina un número\n")
	print("hola, he pensado un número del 1 al 10")
	print("intenta adivinarlo! :-D")
end

Para llamar a la función únicamente escribimos el nombre seguido de paréntesis () en el lugar donde nos haga falta:

function bienvenida()
	print("www.altaruru.com lua - basics - bucles")
	print("mini juego - adivina un número\n")
	print("hola, he pensado un número del 1 al 10")
	print("intenta adivinarlo! :-D")
end

bienvenida()
adivina = 7
numero = 0
while(adivina ~= numero)
do
	print("dime tu numero")
	numero=io.read("*n")
end
print("enhorabuena, acertaste!")

Parámetros de entrada en las funciones

Las funciones nos permiten enviar datos/variables que hacen más flexible aun su uso, por ejemplo, vamos a utilizar la misma función en el resto de ejemplos pero cambiaremos el título (linea 2):

function bienvenida(titulo)
	print("www.altaruru.com lua - basics - bucles")
	print(titulo .. "\n")
	print("hola, he pensado un número del 1 al 10")
	print("intenta adivinarlo! :-D")
end

La llamada ahora a la función incluirá el título:

bienvenida("mini juego - adivina un número con funciones")

Ojo, los parámetros son obligatorios, si creamos una función que espera una variable hay que pasársela o el código dará error.

Parámetros de salida en funciones

Las funciones pueden devolver datos, para ello utilizamos return:

function piensanumero()
	return 8
end

La función piensanumero() devuelve siempre 8, para usarla hacemos adivina = piensanumero(), estamos cargando el retorno de la función en la variable adivina.

El código completo queda así:

function bienvenida(titulo)
	print("www.altaruru.com lua - basics - bucles")
	print(titulo .. "\n")
	print("hola, he pensado un número del 1 al 10")
	print("intenta adivinarlo! :-D")
end

function piensanumero()
	return 8
end

bienvenida("mini juego - adivina un número con funciones")
adivina = piensanumero()
numero = 0
while(adivina ~= numero)
do
	print("dime tu numero")
	numero=io.read("*n")
end
print("enhorabuena, acertaste!")

Si queremos cambiar nuestro programa para que el número sea aleatorio únicamente cambiamos la función, el resto del código se mantiene:

function piensanumero()
	math.randomseed(os.time())
	return math.random(1,10)
end

Otro ejemplo, seguimos ordenando el código, vamos a agrupar el código pedir número:

function pedirnumero()
	print("dime tu numero")
	numero=io.read("*n")
	return numero
end

El programa completo ahora queda así:

-- funciones:
function bienvenida(titulo)
	print("www.altaruru.com lua - basics - bucles")
	print(titulo .. "\n")
	print("hola, he pensado un número del 1 al 10")
	print("intenta adivinarlo! :-D")
end

function piensanumero()
	math.randomseed(os.time())
	return math.random(1,10)
end

function pedirnumero()
	print("dime tu numero")
	numero=io.read("*n")
	return numero
end
-- fin declaracion funciones

-- iniciamos juego:
bienvenida("mini juego - adivina un número con funciones")
adivina = piensanumero()
numero = 0
while(adivina ~= numero)
do
	numero=pedirnumero()
end
print("enhorabuena, acertaste!")

Las variables declaradas en una función solo tienen valor en dicha función. Volvamos a la función pedirnumero():

function pedirnumero()
	print("dime tu numero")
	numero=io.read("*n")
	return numero
end

Aunque se llamen igual, la variable numero de la función no es la misma que la variable número del código principal.

El valor recogido desde teclado por el usuario y guardado en la variable numero en la instrucción: numero=io.read(«*n»), debe devolverse con return, de otro modo, como al terminar la función las variables internas se pierden, perderíamos también el valor recuperado.

Cualquier duda en comentarios y la resolvemos que para eso estamos.

En la próxima entrada haremos un repaso de todo lo visto hasta ahora.

Feliz código!

Deja tu comentario