Instrucciones condicionales en Karel

En ocasiones cuando queremos hacer algo ocurre un evento desafortunado por el cual ya no podemos realizarlo, como querer comprar un pastel tres leches y que ya no haya mas que pays :c Sin embargo, de no haber pasado eso, habríamos seguido nuestro plan sin problemas. Aunque, veamos el lado positivo, si no hay del sabor que queríamos podemos llevar otro. En otras palabras podríamos decir:

Si hay pastel de tres leches entonces compro ese, sino compro un pay.

Esto lo conocemos como una condición y en el caso de la programación es exactamente lo mismo.

Estructura

La estructura es de hecho bastante similar a la manera natural de decir una condición:

PascalJava

Podemos notar varias partes en el enunciado: La palabra reservada del compilador si | if que le indica que está recibiendo una sentencia condicional. La condición que debe evaluar para saber en base a qué decidir. La palabra entonces que le dice al compilador que está por recibir lo que tiene que hacer si esa condición se cumple. También podemos agregar lo que Karel tendría que hacer en caso de que la condición no se cumpla.

PascalJava

Nota que podemos prescindir de especificar un sino | else, pero no podemos poner un sino |else sin un si | if antes de él. (Ni siquiera tendría sentido la oración).

En Pascal el ; se pone al final de la expresión completa, si mi condición no lleva un sino iría justo después de la acción a realizar, de llevarlo iría hasta el final de la acción del sino. En el caso de Java el ; va luego de cada acción.

En #iP notarás las palabras control de las sentencias condicionales marcadas de color morado.

Condiciones disponibles

Como podrás imaginar, Karel no puede evaluar si hay o no pasteles de su sabor favorito y siendo que podrían haber una infinidad de posibles condiciones hay ciertas condiciones especiales que Karel puede evaluar.

Nota que el tipo de condición que usamos aquí puede ser evaluada tan sólo con un o no, con un verdadero o falso.

Las condiciones que Karel puede evaluar, son las siguientes:

PascalJava

Donde cada condición expresa lo que evalúa. La expresión: si junto-a-zumbador o if (nexToABeeper) es verdadera si Karel comparte su posición con un zumbador.

En #iP verás las condiciones marcadas de color naranja.

Bloques de instrucciones

¿Qué pasa cuando queremos hacer más de una acción si una condición se cumple o no se cumple? Con las estructuras anteriores sólo podíamos realizar una acción si se cumplía la condición, o sólo una si no, si queremos realizar más de una acción debemos usar bloques de instrucciones como sigue:

PascalJava

Como notarás, los bloques de instrucciones en Pascal los marcan las palabras inicio y fin. En Java utilizamos llaves, { al principio y } al final del bloque.

En #iP las palabras control que delimitan los bloques los verás marcadas en verde.

Podemos escribir las acciones a realizar al mismo nivel del si | if y podemos poner todas las acciones en una línea (siempre y cuando no olvides los ; al final de cada comando) pero es aconsejable que dejes espacios para mantener todo ordenado y más fácil de entender. A estos espacios se les llama identación o sangrado.

Condiciones agrupadas

Puede darse (muy seguido) que necesitemos considerar no sólo una condición, si ese es el caso podemos usar una simple clausula de conjunción o disyunción para agregar más. Una clausula de conjunción es y por ejemplo, una de disyunción es o.

PascalJava

Karel avanzará si y sólo si ambas condiciones se cumplen, es decir en la primera línea, si Karel está junto a un zumbador y tiene el frente libre entonces avanzará. No importa si sólo una se cumple, tienen que cumplirse ambas para que la acción se realice. Nota que en pascal podemos usar y y e para que se lea mejor, pero en Java únicamente usamos &&.

Pero existe otro caso, el caso en el que tanto si se cumple una u otra condición se realice cierta acción. Ahí usamos las cláusulas de disyunción como sigue:

PascalJava

En este caso, Karel dejará un zumbador si una de las dos condiciones se cumple es decir, en la primera línea si está junto a un zumbador o si tiene la izquierda libre. No importa si una no se cumple, con que una de las dos se cumpla se realizará la acción. Nota que en Pascal podemos usar o y u, en Java únicamente usamos ||.

Está además la clausula no en Pascal y ! en Java, que se considera verdadera cuando la condición a su lado no se cumple:

PascalJava

Karel avanzará si el frente no está bloqueado. ¿Pero qué no pude haber utilizado la condición frente-libre? Sí, en este caso podemos utilizar la condición análoga, sin embargo, más adelante encontraremos casos en los que no hay una y tendremos que usar forzosamente la clausula no | !.

En #iP encontrarás los caracteres de conjunción, disyunción y negación marcados de un color gris azulado.

Ejemplos

Condición sencilla:

PascalJava

Condición completa:

PascalJava

Condición sencilla con bloque:

PascalJava

Condición completa con bloque:

PascalJava

Condición agrupada sencilla con bloque:

PascalJava

Condición agrupada completa con bloque:

PascalJava

Por si no te lo habías preguntado, puedes poner una condición dentro de otra, de hecho puedes poner cualquier cosa dentro de un bloque.

PascalJava

Nota lo útil que es identar nuestros códigos para poder distinguir mejor entre un bloque de acciones y otro.

Problemas sugeridos

Cita esta página

Include Poetry - Code. (2020, 4 de enero). Instrucciones condicionales en Karel. Obtenido de https://www.include-poetry.com/Code/Karel/Instrucciones/Condicionales/

/* Comentarios */