Saltar a contenido

Estructuras de control

Al trasladar problemas a código, es necesario utilizar una serie de estructuras que permitan programar el comportamiento deseado. Estas estructuras se dividen en dos grandes bloques:

  • Estructuras de condición.
  • Estructuras de repetición

Condición

La condición simple se realiza mediante la instrucción if. Entre paréntesis se coloca la condición, la cual se evalúa como true o false. Si no se utilizan llaves, solo se ejecutará la siguiente instrucción.

Siempre llaves

Es recomendable usar llaves aunque solo haya una instrucción en el momento de codificar. De esta manera, se deja preparado el código para añadir más instrucciones en el futuro, evitando posibles errores (bugs).

ejemploif.php
<?php
$hora = 8; // La hora en formato de 24 horas
if ($hora === 8) {
    echo "Suena el despertador.";
}
echo "<br>";
if ($hora === 8)
    echo "Suena el despertador.";

Las condiciones compuestas se pueden manejar con if-else:

ejemploifelse.php
<?php
$hora = 17; // La hora en formato de 24 horas
if ($hora <= 12) {
    echo "Son las " . $hora . " de la mañana";
} else {
    echo "Son las " . ($hora - 12) . " de la tarde";
}

Para manejar múltiples condiciones, se utilizan las estructuras if-else if-else:

ejemploifelse2.php
<?php
$hora = 14; // La hora en formato de 24 horas
if ($hora === 8) {
    echo "Es la hora de desayunar.";
} else if ($hora === 14) {
    echo "Es la hora de la comida.";
} else if ($hora === 21) {
    echo "Es la hora de la cena.";
} else {
    echo "Ahora no toca comer.";
}

La sentencia switch también permite gestionar condiciones múltiples de manera eficiente:

ejemploswitch.php
<?php
$hora = 14; // La hora en formato de 24 horas
switch ($hora) {
    case 9:
        echo "Es la hora de desayunar.";
        break;
    case 14:
        echo "Es la hora de la comida.";
        break;
    case 21:
        echo "Es la hora de la cena.";
        break;
    default:
        echo "Ahora no toca comer";
}

No olvides el break

Un error común es omitir la instrucción break después de cada caso. Si no se incluye, el siguiente caso se ejecutará automáticamente.

El operador ternario también puede ser utilizado para condiciones simples en una línea con la sintaxis condición ? valorTrue : valorFalse:

ejemploternaria.php
<?php
$hora = 14;
$formato = ($hora > 12) ? 24 : 12;
echo "El formato es de $formato horas"

Si queremos comprobar si una variable tiene valor y si no darle un valor determinado, usaremos el operador ?: (se conoce como el operador Elvis - https://en.wikipedia.org/wiki/Elvis_operator) con la sintaxis expresión ?: valorSiVacio:

ejemploternaria2.php
<?php
$nombre = $_GET['nombre'] ?: "desconocido"

Repetición

La instrucción while permite repetir una serie de instrucciones mientras una condición sea verdadera:

ejemplowhile.php
<?php
$i = 1;
while ($i <= 10) {
    echo "Línea " . $i;
    echo "<br>";
    $i++;
}

La instrucción do-while asegura que las instrucciones se ejecuten al menos una vez, incluso si la condición es falsa al inicio:

ejemplodowhile.php
<?php
do {
    $dado = rand(1, 6);
    // rand() devuelve un valor aleatorio 
    echo "Tirando el dado... ";
    echo "ha salido un " . $dado . ".";
    echo "<br>";
} while ($dado != 5);
echo "¡Bien! Saco una ficha de casa.";

El bucle for es ideal cuando se conoce el número de iteraciones previamente:

ejemplofor.php
<?php
// Bucle ascendente
for ($i = 1; $i <= 10; $i++) {
    echo "Línea " . $i;
    echo "<br>";
}

// Bucle descendente
for ($i = 10; $i >= 0; $i--) {
    echo "Línea " . $i;
    echo "<br>";
}

Más adelante estudiaremos el bucle foreach para recorrer arrays.

PHP, al igual que lenguajes como Java y C, permite interrumpir bucles con la instrucción break. La instrucción continue permite saltar a la siguiente iteración.

Si puedes, evita break y continue

Aunque son útiles, es preferible evitar su uso en lo posible. En su lugar, se pueden utilizar variables de control (flag) para gestionar la salida de los bucles. Por ejemplo:

ejemploflags.php
<?php
$salir = false;
for ($i = 1; $i <= 10 && !$salir; $i++) {
  if ($i === 5) {
    echo "Salgo cuando i=5";
    $salir = true;
  }
}
?>

Actividades

  • 📝 AC 207. (RA2 / CE2e CE2f CE2h / IC1 / 3p) - Se solicita la creación de un programa que muestre los números pares del 0 al 50 dentro de una lista desordenada. Una vez finalizado, el programa debe ser refactorizado para que haga uso de variables que almacenen el valor inicial y final de la lista.

  • ⚓ AR 208. (RA2 / CE2d CE2e CE2g CE2h / IC1 / 3p) - Con el fin de verificar el dominio de las matemáticas, el CTO requiere un programa que sume los números del 1 al 10. Tras completarlo, debe refactorizarse para que funcione con valores de inicio y fin definidos.

  • 🔬 AP 209. (RA2 / CE2d CE2e CE2g CE2h / IC1 / 3p) - Continuando con la evaluación del dominio matemático, se debe escribir un programa que, a partir de una base y un exponente, calcule la potencia mediante acumulación de productos usando la instrucción for.

    Posteriormente, el ejercicio debe reescribirse utilizando solo la instrucción while, y luego reescribirse nuevamente utilizando únicamente do-while.

    Recordatorio de potencias

    Sabemos que 2^3= 8, ya que es igual a multiplicar 3 veces el número 2.