Funciones prototipo
Otra forma de definir funciones en Karel es utilizando las funciones prototipo las cuales son una forma de “pre-declarar” la existencia de una función.
- Orden de declaración de funciones
- Implementación
- En Karel Java
Orden de declaración de funciones
Supongamos que en nuestro código queremos definir dos funciones: una que se llame AvanzayZumbador
y otra de nombre gira-derecha
las cuales contienen los siguientes comandos:
Nótese que en este ejemplo de código Karel no hará ninguna acción, sólo se apagará, ya que las funciones fueron declaradas después de iniciar-programa
sin ser llamadas dentro de la función principal, es decir, después de inicia-ejecucion
.
Una vez que tenemos las funciones definidas, podemos llamar a la función AvanzayZumbador
para que Karel realice las instrucciones indicadas en ella:
Ahora imaginemos que es necesario que Karel corrija su rumbo, para esto tendríamos que hacer una modificación en la función AvanzayZumbador
ya que es la función que estamos llamando desde la función principal. Por ejemplo, si en lugar de que Karel gire dos veces hacia la izquierda después de que deje el primer zumbador queremos que gire a la derecha, entonces podríamos sustituir la instrucción de la línea 5 repetir 2 veces gira-izquierda
por gira-derecha
. En este caso estaríamos llamando a una función secundaria desde otra función secundaria, es decir, estaríamos llamando a la función gira-derecha
desde la función AvanzayZumbador
. Esto se vería así:
De este modo Karel haría lo que se indica en la función llamada AvanzayZumbador
, comenzando por avanzar, dejar un zumbador y después la nueva instrucción gira-derecha
para posteriormente continuar con el resto de la función. Pero aquí pasa algo extraño. Si tratas de ejecutar este código, notarás que el compilador te notificará el error “Función no definida: gira-derecha”. Esto ocurre porque al compilar el código, éste se va compilando línea por línea y al llegar a la línea 5 el compilador “se da cuenta” de que intentaste llamar a una función que no está declarada en las líneas de código anteriores que ya revisó, en este caso la función gira-derecha
no está declarada en las líneas 1, 2, 3, y 4.
Implementación
Justo para evitar este tipo de errores es necesario usar la función prototipo, la cual permite llamar a una función desde otra función que fue declarada en líneas anteriores. Pero claro, para que pueda funcionar correctamente, se tiene que declarar la función prototipo líneas antes de declarar la función desde donde se le va a llamar. Para hacerlo usamos la sentencia de control define-prototipo-instruccion
seguido del nombre de la función que queremos “pre-declarar”, en nuestro ejemplo sería la función gira-derecha
y se implementaría así:
Ahora puedes compilar y ejecutar el código y Karel podrá completar su tarea. Como podrás notar, lo único que debes hacer es escribir define-prototipo-instrucción gira-derecha
sin escribir lo que contiene la función, porque en líneas más abajo vas a definirla completamente. define-prototipo-instrucción
nos sirve para “presentar” a una función líneas antes de su declaración como tal, para que cuando se compile el código, el compilador “sepa” que existe esa función y que en algún lugar está definida. De esta forma ya podrás llamar a una función secundaria desde otras funciones sin importar el orden de declaración.
Utilizar las funciones prototipo pueden ser de gran utilidad cuando tienes demasiadas funciones en tu código y estas se llaman entre sí, pues de esta manera no es necesario que las definas en el órden en el que van siendo ejecutadas.
En Karel Java
Si tu código lo escribes en la sintaxis de Java no es necesario utilizar las funciones prototipo ya que el compilador “busca” la función en las líneas de código posteriores. ¿Quieres hacer la prueba? ejecuta este código:
Cita esta página
Include Poetry - Code. (2020, 19 de octubre). Funciones prototipo. Obtenido de https://www.include-poetry.com/Code/Karel/Funciones/Prototipo/