Hemos visto ya la sentencia iterate que nos ayuda a iterar un bloque de código un determinado número de veces, pero siempre teníamos que colocar un número fijo en la sentencia, ¿te has puesto a pensar que pasaría si por ejemplo necesitara una instrucción que volteara a Karel 180°? Pues la respuesta natural sería "haz una instrucción que haga que Karel gire dos veces". Pero... ¿crees que sería posible usar la instrucción que hicimos anteriormente turnright()? Si existiese alguna forma de que en vez de poner 3 en la sentencia iterate pusiesemos un número variable, podríamos usar la instrucción tanto para girar a la derecha como para dar media vuelta.
¡Pues si existe! Primero retomemos el código para girar a la derecha:
...
void turnright() {
iterate(3) {
turnleft();
}
}
...
Ahora, todas las nuevas instrucciones declaradas pueden además llevar un parámetro, ¿pero que es un parámetro?, pues es un numerito que le podemos mandar a la instrucción cuando la llamamos, y como cuando declaramos la instrucción no sabemos con que número la vamos a llamar, reemplazamos el número por una palabra. ¿Alguna vez has oído la frase "los primeros n números"?, pues precisamente eso son los parámetros. Podemos en vez de n poner 1, 2 ó 3, quedando "los primeros 3 números" por ejemplo. Este parámetro puede tener el nombre que sea, siempre y cuando la primer letra no sea un número y el nombre del parámetro no sea el mismo que una palabra del lenguaje, por ejemplo no se puede llamar if, iterate, move, etc.
Este parámetro se puede usar en cualquier lugar dentro de la definición de la instrucción, en cualquier sentencia o instrucción que necesite un número (justo como la sentencia iterate). Redefinamos ahora la instrucción turnright como la instruccion turn:
...
void turn(n) {
iterate(n) {
turnleft();
}
}
...
De esta forma si escribimos en nuestro código "turn(3);" Karel girará a la derecha, si escribimos "turn(2);" dará media vuelta, si escribimos "turn(1);" girará a la izquierda y si escribimos "turn(0);" no hará nada.
Aqui puedes ver como se escribe una instrucción con un parámetro en general:
...
void xxx (yyy) {
zzz
}
...
donde xxx es el nombre de la instrucción, yyy es el nombre del parámetro y zzz es cualquier número de instrucciones.
Ejercicio 9: Escribe una nueva instrucción que avance a Karel el número de veces que se le mande como parámetro. Debes de evitar que Karel choque con alguna pared.
¿Tienes dudas? Usa como base el código de la instrucción gira.