La estructura if-else
Saludos a tod@s. Anteriormente he descrito las estructuras de control de flujo típicas de cualquier lenguaje de programación moderno, y también las estructuras de selección. Ahora en esta entrada le dedicaré un poco de tiempo a la estructura de selección if-else, ya que es una de las más importantes que utilizamos en la escritura de programas.
¿Qué es?
La estructura de control de flujo if-else es una estructura de selección, porque le permite a la computadora decidir qué conjunto de acciones realizará, dependiendo del resultado de una expresión condicional. Es sumamente importante, porque prácticamente le otorga a la computadora la “capacidad de decidir”, una de las capacidades más importantes que se requieren para la solución de un problema.
Sintaxis
La sintaxis se entiende como:
el grupo de normas que marcan las secuencias correctas de los elementos propios de un lenguaje de programación.[fuente]
Esto quiere decir que cada vez que escuches la palabra sintaxis asociada a una estructura de control, implica la “forma general” para escribir esa estructura, así como el conjunto de reglas para escribirla adecuadamente.
En el caso de la estructura if-else, te presento la sintaxis usando la notación de diagrama de flujo (Figura 1), la notación de pseudocódigo (Figura 2), y el lenguaje de programación Java (figura 3).

Figura 1. Estructura if-else en notación de diagrama de flujo
Como puedes apreciar, el componente más importante es la expresión condicional (relacional o booleana) o simplemente condición. Del resultado de evaluar ésta dependerá si se ejecuta el conjunto de acciones (al que denominaremos bloque) que se encuentran en la rama verdadera o el bloque de la rama falsa.

Figura 2. Estructura if-else en notación de pseudocódigo
La cláusula else (de lo contrario, sino) no es obligatoria, pero siempre será obligatorio que al menos exista la rama verdadera. Eso quiere decir que trataremos de escribir estructuras de selección para que se cumplan, para que se ejecute la rama verdadera. En caso de que necesites la ejecución de un bloque de código cuando una condición sea falsa, existen operadores que te ayudarán a expresar esto (!, !=), pero de ninguna forma podrá existir un else sino existe una rama verdadera de un if.

Figura 3. Sintaxis de la estructura if-else en Java
Ejemplo.
Planteamiento del problema.
Para ejemplificar el uso de esta estructura, considera el siguiente problema:
“Una tienda departamental ha ofrecido una promoción en la compra de jeans. Si el cliente compra más de dos pantalones, recibirá un descuento del 30% sobre el precio de venta que es de $650.00. Elabore un programa que calcule el valor a pagar por un cliente, ingresando el número de jeans que comprará.”
Entendiendo el problema: identificación de las variables.
Para resolver este problema, primero debemos tener bien claro cuáles son las variables que intervienen en el proceso, por lo que en ocasiones es conveniente iniciar con un diagrama como el que te muestro en la figura 4.

Figura 4. Diagrama de entrada/salida para el ejemplo
En este diagrama, puedes observar que he detectado como variable de entrada únicamente a jeans. El precio de venta, los 650, no lo considero como una variable de entrada porque no es un valor que el cliente puede modificar o sobre el que tenga el poder: un cliente puede decidir comprar 2, 3 o 5 pantalones si así lo desea, pero no puede establecer el precio de venta de cada pantalón, porque ese valor es establecido por la tienda.
Podemos deducir que los datos de entrada son aquellos sobre los que el usuario tiene poder para asignarle valores. Todo lo que no sea así, es una variable de proceso, una constante o un variable de salida. Espero que esto quede más claro con la tabla que muestro en la figura 5.

Figura 5. Tabla de variablespara el problema ejemplo
Este tipo de tablas las puedes hacer para tener control sobre cada una de las variables que intervienen en tu programa. De hecho, más adelante, cuando estés haciendo programas más grandes en los que tú no seas el único autor, este tipo de tablas te ayuda a que cada programador conozca las variables del software en construcción.
Diagrama de Flujo
Una vez que hemos identificado las variables que intervendrán en el programa, procedemos a la construcción del algoritmo. En la figura 6 te muestro el algoritmo en notación de diagrama de flujo.

Figura 6. Diagrama de flujo para resolver el problema del ejemplo planteado
Observa que se establecen los valores iniciales de cada una de las variables de proceso que están definidas por la tienda, en este caso, el precio y el descuento. Posteriormente pido que el usuario introduzca el valor de entrada de la variable jeans, mediante el símbolo de lectura apropiado. A continuación, escribo la expresión condicional, la pregunta cuya respuesta decidirá si el cliente tiene o no derecho al descuento:
jeans > 2
Y como puedes ver cumple con la condición que la tienda ha puesto para ofrecer el descuento al cliente. Observa que la condicional cumple con las reglas de estas expresiones. Y su resultado será un valor booleano: true o false.
Ahora, del lado derecho escribo las acciones para la rama Verdadera, es decir, cuando se cumple que el cliente compre más de dos pantalones. En este caso, lo que hago es aplicar el 30% de descuento. Y después en el lado izquierdo del rombo, escribo las acciones para la rama Falsa, cuando el cliente no compra más de dos pantalones.
Pseudocódigo
En la figura 7 te muestro el pseudocódigo del diagrama de flujo correspondiente. (Recuerda que pseudocódigo y diagrama de flujo son ambos algoritmos, sólo en una notación diferente).

Figura 7. Pseudocódigo para el problema ejemplo utilizando la estructura if-else
En el pseudocódigo me interesa destacar lo siguiente:
- El símbolo de lectura lo dejo indicado simplemente con una función imaginaria (que en el programa será sustituida por la función para introducir valores de entrada del lenguaje que usemos para programar). En este caso, el nombre de la función que he escogido es Leer(), aunque también pude haber usado Entrada(), o algún nombre similar, esa es la flexibilidad de la notación de pseudocódigo, sólo asegúrate de utilizar la misma palabra a lo largo de un algoritmo, sé consistente al respecto.
- Del mismo modo, nuevamente dejo indicado el símbolo de salida con una función imaginaria para imprimir datos en la pantalla. En este caso, el nombre de la función que he escogido es Imprimir(), aunque también pude haber usado Salida().
- Presta atención a la sangría, no es un elemento que el compilador te exija, pero sí mejora la legibilidad del pseudocódigo, y posteriormente los programas que escribas. En inglés usan el termino readability, para indicar que el programa o pseudocódigo es fácil de leer. Es una característica que forma parte de las buenas prácticas de programación.
¿Es obligatorio escribir el diagrama de flujo Y el pseudocódigo? No necesariamente. Los diagramas de flujo pueden ser de mucha ayuda cuando estás creando tus primeros programas. Pero cuando el problema es más complejo, los diagramas de flujo pueden ser un verdadero fastidio, pues se vuelven muy grandes, y difíciles de manejar en una sola hoja. Personalmente prefiero que mis estudiantes aprendan a escribir pseudocódigo, porque son más parecidos a lo que el programa será. Además, aquellos que saben leer pseudocódigos también saben leer programas. (Y no estoy hablando sólo de leer, sino de comprender). Pero si estás iniciando, es una buena práctica crear el diagrama de flujo, y en base a este, escribir el pseudocódigo. Y poco a poco, ir adoptando más la técnica de usar los pseudocódigos para expresar tus algoritmos.
Programa.
En la figura 8 te muestro el listado del programa creado. Hasta el momento hemos hablado de las variables de entrada, salida y proceso. Pero no hemos hablado de su tipo. Y es que debes recordar que EN EL ALGORITMO NO SE DECLARAN VARIABLES, sin importar si se trate de la notación de diagrama de flujo o de pseudocódigo, simplemente NO SE DECLARAN VARIABLES. Se identifican, se les da nombre, valor, y se indica como calcularlas, pero no se declaran. No se les asigna un tipo de dato. Hasta el momento.
/* * Programa para ejemplificar el uso de la estructura if-else * Blog: dcodinGames.com */ package ejemploifblog; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * * @author Gaby Nieva - d_codinGames */ public class EjemploIfBlog { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { //Declaración de constantes final double PRECIO = 650; final double DESCUENTO = 0.30; // Declaración de variables int jeans; double precioActual; double total; // Declaración de objetos y variables para el flujo de entrada BufferedReader bufer = new BufferedReader(new InputStreamReader(System.in)); String entrada; // Entrada de datos System.out.println("Programa que calcula el costo total de ventas de jeans"); System.out.println("Escriba número de jeans que el cliente va a comprar: "); entrada = bufer.readLine(); jeans = Integer.parseInt(entrada); // Estructura if-else if (jeans>2) precioActual = PRECIO - PRECIO * DESCUENTO; else precioActual = PRECIO; total = jeans * precioActual; // Salida System.out.println("El total a pagar por " + jeans + " jeans es: " + total); } }
Una vez que llega la hora de crear el programa, lo primero que debemos preguntarnos es:
¿Cuáles son las variables del algoritmo, y qué tipo de dato están almacenando?
Para ello, debes analizar con detenimiento tu algoritmo, detectando las variables y el tipo de dato que guardan. Una vez hecho esto, puedes proceder a declararlas en el programa, antes de traducir cualquier acción definida en tu algoritmo.
Ahora sí, puedes proceder con la escritura de tu programa, siguiendo el pseudocódigo o diagrama de flujo creado. Cada paso escrito en el algoritmo, debe ser traducido usando las reglas del lenguaje de programación.
Como puedes observar, sólo para hacer la lectura de datos de la variable jeans, se utilizaron 3 líneas:
- el mensaje para solicitar los datos,
- la lectura desde el bufer de entrada y
- la conversión de String a int.
Si tienes algún problema entendiendo el uso de BufferedReader, puedes hacer click aquí para leer un poco más sobre este tópico.
Como puedes apreciar, el pseudocódigo es muy similar al lenguaje Java por lo que la traducción es rápida y transparente.
Por último, termino con la impresión de salida de la variable calculada, usando la instrucción de Java: System.out.println.
Y de esta forma termina esta entrada, con un ejemplo sencillo sobre el uso de la estructura if-else. Te invito a dejar un comentario sobre el tema. Y no olvides compartir en tus redes.
Un saludo, y ¡hasta la próxima entrada!
Carlos Israel Torres López
Leído