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.
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.
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_conditionFuncionalidad ú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:
elforPermite especificar un bloque de código alternativo que se ejecutará cuando la condición del filtro no se cumpla. - Terminación:
endMarca el final del bloquefor.
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
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.
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
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.
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
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.