Bienvenidos sean a este post, hoy hablaremos sobre dos funciones que nos permiten salir de un bloque, la funcion break se usa para salir de un bucle for, while o repeat, no puede ser usado fuera del mismo y una vez ejecutado saldra del bloque y continuara con el resto de las instrucciones del programa, en cambio la funcion return devuelve, ocasionalmente, el resultado de una funcion o simplemente la finaliza, en toda funcion hay un return implicito al final por lo que no es necesario utilizar uno si nuestra funcion no devuelve ningun valor y finaliza naturalmente.

Anuncios

Por razones de sintaxis el break o return solo puede aparecer al final del bloque, es decir al final del chunk o justo antes de un end, else o inclusive un until, veamos unos ejemplos de sintaxis de break y return:

Ejemplo con un if de un break:
if condicion then
    ... instrucciones ...
    break
end

Ejemplo de un return en una funcion:
function nombreFuncion()
    ... instrucciones ...
    return valor
end

Esto lo hacemos asi porque en general toda declaracion posterior a ellos es inalcanzable pero estas dos funciones pueden ser usadas para depuracion de un programa, por ejemplo si nosotros estamos haciendo la depuracion de un programa en algunas ocasiones es recomendable poner en medio de un bloque de alguna funcion alguno de estas funciones para interrumpir la ejecucion de la misma y chequear si el error se produce en la misma o en otra pero a diferencia de como la vimos antes no podemos llamarlas directamente sino como vimos en variables locales debemos usar el bloque do … end, veamos un ejemplo de sintaxis:

Forma incorrecta:
function foo()
    return
    … instrucciones …
end

Forma correcta:
function foo()
    do return end
    … instrucciones …
end

Para entender un poco mejor este concepto veamos el siguiente ejemplo:

break.lua

function sumar(x, y)
        return x + y
end

repeat
print("Ingresa un valor o q para salir: ")
local a = io.read()
if a == "q" then break end
print("Ingresa otro valor: ")
local b = io.read()
print("La suma de los dos valores da " .. sumar(a,b))
until x==10
Anuncios

Para este ejemplo hablaremos sobre un tema que desarrollaremos en los proximos posts como son las funciones, para este programa creamos una funcion llamada sumar la cual recibira dos datos (x e y) y nos devolvera la sumatoria de los valores recibidos, return x + y, despues crearemos un repeat-until que se repetira al infinito, esto es gracias a que pusimos una condicion que nunca se va a cumplir porque nunca incrementamos a x, pasemos a hablar sobre el bloque; en el primer caso mostraremos un mensaje de ingreso de un valor o la letra q para salir, despues tendremos una variable para almacenar el primer valor llamada a, despues tendremos un condicional donde chequea si a es igual a q, en caso de ser cierto llamara al break y saldra del programa, en caso contrario lo omitira y continuara con el programa, en este caso pedira otro valor, una vez ingresado procedemos a mostrar un mensaje y el resultado de la suma de ambos valores por medio de la funcion sumar, observen como usamos variable locales pero estas al informarlas a la funcion salieron de la misma y pudieron ser procesadas, probemos el programa para ver su salida

En este caso podemos ver como ejecutamos varias operaciones antes de ingresar la letra q, esto lo podriamos haber hecho hasta el infinito porque la condicion de salida nunca se hubiera cumplido, entonces al ingresar q se cumple el condicional y podemos salir del bucle y del programa tambien porque no existen mas instrucciones, en caso de haber existido otras instrucciones hubiera continuado con estas.

Anuncios

En resumen, hoy hemos visto la funcion break que nos sirve para salir de un bloque o un bucle, hemos visto a return, para que se usa, como utilizar ambas funciones, como utilizar un return para hacer depuracion, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00