Saltar al contenido principal

Estructuras de Control

Las estructuras de control son elementos fundamentales en la programación que permiten controlar el flujo de ejecución de un programa. Estas estructuras permiten tomar decisiones, repetir bloques de código y manejar errores.

En JARU, todas las estructuras de control, como if, else, elsif, while, for, etc., deben finalizar con la palabra clave end. Esto indica al compilador que ha llegado al final de la estructura de control. La utilización de end es necesaria para evitar errores sintácticos y para mantener una estructura de código limpia y fácil de entender.

Flujo if-then-else

La estructura de control if-then-else es una de las estructuras de control más básicas en la programación. Es utilizada para tomar decisiones en base a una condición dada. La sintaxis básica es la siguiente:

if (condicion) then
// codigo a ejecutar si la condicion es verdadera
else
// codigo a ejecutar si la condicion es falsa
end

La cláusula elsif es una extensión del if-then-else que permite evaluar varias condiciones en una sola estructura de control. El código se ejecutará en el primer bloque que se cumpla la condición:

if (condicion1) then
// codigo a ejecutar si la condicion1 es verdadera
elsif (condicion2) then
// codigo a ejecutar si la condicion2 es verdadera
else
// codigo a ejecutar si ninguna condicion anterior es verdadera
end

Flujo switch-case

La estructura de control switch-case es una forma de controlar el flujo de un programa mediante la selección de diferentes caminos en función de una variable o expresión. Es similar al uso de varias estructuras if-else anidadas, pero tiene la ventaja de ser más legible y fácil de mantener.

switch (variable o expresión) 
case valor1:
// instrucciones
case valor2:
// instrucciones
default:
// instrucciones
end

La expresión se evalúa y se compara con cada uno de los valores case. Si se encuentra una coincidencia, se ejecutan las instrucciones asociadas a ese caso. Si no se encuentra ninguna coincidencia, se ejecutan las instrucciones del default.

tip

En JARU, la estructura switch-case se puede utilizar con cualquier tipo de dato, incluyendo strings y variables dinámicas.

Bucle for

La estructura for en JARU se utiliza para realizar un bucle de manera controlada. La sintaxis básica es la siguiente:

for (inicialización; condición; incremento) 
// cuerpo del bucle
end

La inicialización es la expresión que se ejecuta al principio del bucle, suele ser una variable que se utilizará como contador. La condición es una expresión que se evalúa en cada iteración del bucle, si la condición es falsa, el bucle termina. El incremento es la expresión que se ejecuta al final de cada iteración del bucle.

for (var i = 1; i <= 10; i++) 
println(i)
end

En este ejemplo, la inicialización es var i = 1, la condición es i <= 10, y el incremento es i++. Cada vez que el bucle se ejecuta, se imprime el valor de la variable i y se incrementa en 1.

Bucle infinito

Se puede crear un bucle infinito con for con la siguiente sintaxis:

for (;;)
// cuerpo del bucle
end

Ejemplos de uso de for

Iterar un número determinado de veces:

for (var i = 0; i < 10; i++)
println("Iteración ", i)
end

Iterar sobre una lista:

var miLista[5] = [1, 2, 3, 4, 5]
for (var i = 0; i < 5; i++)
println("El elemento en la posición ", i, " es ", miArreglo[i])
end

Iterar en orden inverso:

for (var i = 10; i > 0; i--)
println("Iteración ", i)
end

For Extendido

Una característica única de JARU es su estructura de control for extendida, que agrega funcionalidades de filtro y código alternativo para proporcionar una mayor flexibilidad a los programadores.

La declaración for extendida en JARU sigue la estructura siguiente:

for (var i = start_value; i < end_value; i = i + increment_value; filter_condition) 
// código a ejecutar cuando la condición del filtro es verdadera
elfor
// código alternativo a ejecutar cuando la condición del filtro es falsa
end

Análisis de la estructura

  • Inicialización: var i = start_value; Aquí es donde se inicializa la variable de control del bucle.
  • Condición: i < end_value; Esta es la condición que se evalúa antes de cada iteración del bucle.
  • Actualización: i = i + increment_value; Esta es la operación que se realiza después de cada iteración del bucle.
  • Filtro: filter_condition Funcionalidad única de JARU que permite establecer una condición adicional que debe cumplirse para que se ejecute el código dentro del bucle.
  • Código Alternativo: elfor Permite especificar un bloque de código alternativo que se ejecutará cuando la condición del filtro no se cumpla.
  • Terminación: end Marca el final del bloque for.

Ejemplos de for extendido

// Bucle FOR con filtro (solo imprime los números pares)
for (var i = 0; i < 10; i = i + 1; i % 2 == 0)
println(i)
end

// Bucle FOR con filtro y alternativa (imprime "impar" para números impares)
for (var i = 0; i < 10; i = i + 1; i % 2 == 0)
println(i)
elfor
println("impar")
end

Casos de uso del for extendido

Procesar solo ciertos elementos:

for (var i = 0; i < list.length; i++; list[i] % 2 == 0)
println(list[i])
end

Manejar excepciones o condiciones especiales:

for (var i = 0; i < data.length; i++; data[i].isValid()) 
process(data[i])
elfor
println("Invalid data at index: ", i)
end

Bucles anidados con características extendidas:

for (var i = 0; i < users.length; i++) 
for (var j = 0; j < users[i].transactions.length; j++; users[i].transactions[j].isFraudulent())
alert("Fraudulent transaction detected for user ", users[i].name)
elfor
processTransaction(users[i].transactions[j])
end
end
Consejo

El for extendido es especialmente útil cuando necesitas procesar colecciones de datos con condiciones complejas, evitando tener que anidar múltiples estructuras if dentro del bucle.

Bucle foreach

La estructura de control foreach en JARU se utiliza para recorrer elementos de una colección, como una lista, un mapa o un array. La sintaxis básica es la siguiente:

foreach (var elemento in coleccion)
// código a ejecutar para cada elemento
end

Donde elemento es una variable temporal que toma el valor de cada uno de los elementos de la colección en cada iteración del bucle. El cuerpo del bucle se ejecuta para cada elemento de la colección.

lista = [1, 2, 3, 4, 5]
foreach (var numero in lista)
println(numero) // Muestra 1, 2, 3, 4 y 5
end

En este caso, la variable numero tomaría el valor de cada elemento de la lista en cada iteración, y el código dentro del bloque foreach se ejecutaría para cada elemento.

info

El ciclo se detiene automáticamente una vez que se han recorrido todos los elementos de la colección.

Bucle while

La estructura de control while en JARU es un bucle que se ejecuta mientras se cumpla una condición dada. La condición es evaluada al principio de cada iteración, y si es verdadera, el cuerpo del bucle se ejecuta. Si la condición es falsa, el bucle se detiene y se continúa con la siguiente línea de código.

while (condicion)
// Bloque de codigo a ejecutar
end
Bucle infinito

Si se quiere un bucle infinito con while lo único que hay que hacer es que la condición sea true:

while (true)
// Bloque de codigo a ejecutar
end

Ejemplo:

var i = 0
while (i < 10)
println("La variable i tiene el valor ", i)
i += 1
end

En este ejemplo, la condición es i < 10, por lo que el bucle se ejecuta 10 veces, imprimiendo el valor de la variable i en cada iteración.

Importante

Es importante tener cuidado de incluir una forma de detener el bucle, ya sea cambiando la condición dentro del cuerpo del bucle o usando una estructura de control adicional, de lo contrario el bucle se ejecutará indefinidamente.

Bucle until

El bucle until en JARU se utiliza para repetir un bloque de código hasta que se cumpla una determinada condición.

until (condicion) 
// bloque de codigo
end

En este código, la condicion es una expresión booleana que se evalúa antes de cada iteración del bucle. Si la condición es falsa, el bloque de código dentro del bucle se ejecutará y luego se volverá a evaluar la condición. Este proceso continuará hasta que la condición sea verdadera, momento en el cual se saldrá del bucle.

Ejemplo que imprime los números del 1 al 10:

var i = 1

until (i > 10)
println(i)
i++
end

Otro ejemplo - cuenta hacia atrás desde un número dado hasta cero:

var numero = 10
until (numero == 0)
println(numero)
numero = numero - 1
end
println("¡Despegue!")

Diferencia entre while y until

Tanto until como while son estructuras de control de flujo que se utilizan para implementar bucles. La principal diferencia está en la forma en que se evalúa la condición de salida del bucle:

  • En until, el bucle se ejecuta hasta que la condición especificada es verdadera
  • En while, el bucle se ejecuta mientras la condición sea verdadera
precaución

Es importante tener en cuenta que el bloque de código dentro del bucle debe modificar la condición de alguna manera para evitar un bucle infinito. De lo contrario, el bucle se ejecutará indefinidamente.