Contenido

Funciones

Una funcion en Karel es una instruccion definida por el usuario que puede ser llamada en cualquier momento. Se colocan despues de iniciar-programa y arriba del bloque de ejecución.

Tienen la siguiente estructura

define-nueva-instruccion NOMBRE como
    INSTRUCCION;

A continuación se muestra un ejemplo de una función que gira a la derecha

iniciar-programa
    define-nueva-instruccion gira-derecha como 
    inicio 
        gira-izquierda; 
        gira-izquierda; 
        gira-izquierda; 
    fin; 

    inicia-ejecucion 
        gira-derecha; 
        apagate; 
    termina-ejecucion 
finalizar-programa 

Alias (define)

Desde ReKarel 2.0.0

Puedes usar el alias define en vez de define-nueva-instruccion.

define gira-derecha como 
inicio 
    gira-izquierda; 
    gira-izquierda; 
    gira-izquierda; 
fin; 

Parámetros

Las funciones pueden recibir parámetros numéricos que pueden ser usados dentro de la función para cambiar su comportamiento, llevar una cuenta, etc.

Los parámetros se especifican después del nombre de la función:

define NOMBRE (PARAMETROS) como
    INSTRUCCION;

Veamos un ejemplo, donde creemos una función que deje tantos zumbadores como se pase en el parámetro

iniciar-programa
    define dejaZumbadores (cantidad) como
    inicio
        repetir cantidad veces
            deja-zumbador;
    fin;   

    inicia-ejecucion
        dejaZumbadores(3);
        move();
        dejaZumbadores(5);
        move();
        dejaZumbadores(2);
    termina-ejecucion
finalizar-programa
Deja 3, 5 y 2

Múltiples parámetros

Desde ReKarel 2.0.0

Una función puede recibir más de un parámetro, cada parámetro debe estar separado por comas tanto en la definición de la función como en la llamada, veamos un ejemplo:

iniciar-programa
    define avanzaDejaAvanza (pasos1, cantidad, pasos2) como
    inicio
        repetir pasos1 veces
            avanza;
        
        repetir cantidad veces
            deja-zumbador;

        repetir pasos2 veces
            avanza;

        fin;

    inicia-ejecucion
        avanzaDejaAvanza(2, 8, 1);    
    termina-ejecucion
finalizar-programa
Avanza 2, deja 8 y avanza

Valor de retorno

Desde ReKarel 2.0.0

Las funciones en Karel además pueden tener un valor de retorno, este puede ser una cantidad numérica o una condición booleana.

Para usar un valor de retorno necesitamos cambiar la definición de la instrucción para que incluya el tipo de dato a ser retornado por la función:

TIPO NOMBRE como 
    INSTRUCCIONES;
O con parámetros:
TIPO NOMBRE como
    INSTRUCCION;

Una vez se especifica el tipo, se retorna el valor usando la sentencia regresa valor;. Todo los flujos de la función deben retornar un valor.

Valor de retorno entero

Para retornar un tipo entero basta con definir la instrucción de tipo define-cálculo.

Veamos un ejemplo de un código que se orienta al norte.

iniciar-programa
    { Calcula cuantos giros se necesitan para orientarse al norte }
    define-calculo alNorte como    
    inicio
        si orientado-al-norte entonces
        inicio
            regresa 0;
        fin;
        si orientado-al-este entonces        
        inicio
            regresa 1;
        fin;
        si orientado-al-sur entonces        
        inicio
            regresa 2;
        fin;
        regresa 3;
    fin;

    inicia-ejecucion 
        { Usa la llamada como un número, gira tantas veces como retorne alNorte }
        repetir alNorte veces
            gira-izquierda;
        
    termina-ejecucion 
finalizar-programa 

Valor de retorno booleano

Para retornar un tipo booleano, es decir, que sea verdadero o falso, se usa el tipo define-condición.

Veamos un ejemplo de un código quita los zumbadores si estos son 1, 3 o 5.

usa rekarel.globales;
iniciar-programa
    { Determina si el suelo tiene 1, 3 o 5 zumbadores }
    define-condicion revisa como
    inicio
        si zumbadores-del-piso == 1 entonces
            regresa verdadero;
        
        si zumbadores-del-piso == 3 entonces
            regresa verdadero;
        
        si zumbadores-del-piso == 5 entonces
            regresa verdadero;
        
        regresa falso;
    fin;

    inicia-ejecucion
        { Quita los zumbadores validos }
        si revisa entonces
        inicio
            mientras junto-a-zumbador hacer
                coge-zumbador;
        fin;
    termina-ejecucion
finalizar-programa

Prototipo

Aviso: A partir de ReKarel Pascal 2.0.0, los prototipos son opcionales y se consideran deprecados, por lo que no son explicados en esta documentación. Pero se mantienen con motivos de compatibilidad.