Juicio condicional de múltiples valores (sentencia case)

Juicio de múltiples ramas con una sola expresión

Si necesita ejecutar lógicas distintas según diferentes valores de una misma expresión, la sentencia case .. of .. end resulta muy adecuada.

case SomeValue of
  0: DoSomething;
  1: DoSomethingElse;
  2: begin
       IfItsTwoThenDoThis;
       AndAlsoDoThis;
     end;
  3..10: DoSomethingInCaseItsInThisRange;
  11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
  DoSomethingInCaseOfUnexpectedValue;
end;Lenguaje del código: JavaScript (javascript)

La rama else es opcional y cumple la misma función que default dentro de la sentencia switch de los lenguajes de la familia C.

Si ninguna rama coincide y no se escribe else, no se ejecutará ningún código.

Si dominas los lenguajes tipo C y comparas con la sentencia switch, observarás que el case de Pascal no tiene propagación automática (fall-through). Es una ventana diseñada deliberadamente en Pascal. No necesitas añadir sentencias break manualmente; solo se ejecuta una única rama case como máximo cada vez y al terminar se sale directamente de todo el bloque case.

5 formas válidas de coincidencia

case num of
  5: Writeln('Igual a 5');                  // Valor único
  1,3,5: Writeln('Coincide con 1, 3 o 5');    // Múltiples valores separados por coma
  10..20: Writeln('Rango del 10 al 20');        // Rango numérico continuo
  'a'..'z': Writeln('Letras minúsculas');        // También se admiten rangos de caracteres
else
  Writeln('Sin valor coincidente');
end;Lenguaje del código: JavaScript (javascript)

Las ramas con varias instrucciones deben envolverse en begin..end

case n of
  2: begin
    Writeln('Rama 2');
    Writeln('Ejecutar varias líneas de código');
  end;
end;Lenguaje del código: JavaScript (javascript)

El siguiente ejemplo recibe un número ASCII entre 1 y 128 y clasifica el carácter ASCII correspondiente según el valor introducido.

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;

// Procedimiento encapsulado: pasar código ASCII 0-128 para clasificarlo
procedure JudgeAsciiCode(code: Integer);
begin
  case code of
    // 1. Coincidencia de valor único + varias líneas con begin end (Enter ASCII=13)
    13: begin
      Writeln('======== Tecla Enter especial ========');
      Writeln('Código ASCII: 13 Carácter de control retorno de carro');
      Writeln('=======================================');
    end;

    // 2. Múltiples valores discretos separados por coma: todos los caracteres de control 0-12, 14-31
    0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
      Writeln('Tipo: Carácter de control');

    // 3. Coincidencia por rango: dígitos 0~9 ASCII 48~57
    48..57: Writeln('Tipo: Dígitos 0-9');

    // Rango: Mayúsculas A-Z
    65..90: Writeln('Tipo: Letras mayúsculas A-Z');
    // Rango: Minúsculas a-z
    97..122: Writeln('Tipo: Letras minúsculas a-z');

    // 4. Rama por defecto else + varias líneas con begin end (signos y puntuación)
  else
    begin
      Writeln('Tipo: Puntuación / Símbolo');
      Writeln('Código ASCII introducido: ', code);
    end;
  end;
end;

var
  asciiNum: Integer;
begin
  Write('Introduce un número ASCII entre 0 y 128: ');
  ReadLn(asciiNum);

  // Limitar rango de entrada
  if (asciiNum >= 0) and (asciiNum <= 128) then
    JudgeAsciiCode(asciiNum)
  else
    Writeln('La entrada está fuera del rango 0~128, no es válida!');

  ReadLn;
end.Lenguaje del código: PHP (php)

Para saber más sobre los códigos ASCII, consulta el siguiente artículo: ASCII table – Table of ASCII codes, characters and symbols

Juicio condicional de múltiples valores (sentencia case)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *