Julgamento condicional de múltiplos valores (instrução case)

Julgamento de múltiplos ramos com uma única expressão

Se você precisar executar lógicas diferentes conforme valores distintos da mesma expressão, a instrução case .. of .. end é extremamente adequada.

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

O ramo else é opcional e equivale ao default presente na instrução switch das linguagens da família C.

Se nenhum ramo corresponder e nenhum else for declarado, nenhum código será executado.

Se você tem familiaridade com linguagens tipo C e comparar com a instrução switch, perceberá que o case do Pascal não possui passagem automática (fall-through). Essa é uma vantagem projetada intencionalmente no Pascal. Não é necessário adicionar manualmente instruções break; apenas um ramo case será executado por vez, e após a execução o bloco case todo é encerrado imediatamente.

5 formas válidas de correspondência

case num of
  5: Writeln('Igual a 5');                  // Valor único
  1,3,5: Writeln('Corresponde a um entre 1, 3 e 5');    // Múltiplos valores separados por vírgula
  10..20: Writeln('Intervalo de 10 a 20');        // Faixa numérica contínua
  'a'..'z': Writeln('Letras minúsculas');        // Faixas de caracteres também são suportadas
else
  Writeln('Nenhum valor correspondente');
end;Code language: JavaScript (javascript)

Ramos com várias linhas de código devem ser envolvidos por begin..end

case n of
  2: begin
    Writeln('Ramo 2');
    Writeln('Executar várias linhas de código');
  end;
end;Code language: JavaScript (javascript)

O exemplo abaixo recebe um número ASCII entre 1 e 128 e classifica o caractere ASCII correspondente com base no valor informado.

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

// Procedimento encapsulado: recebe código ASCII 0-128 para classificação
procedure JudgeAsciiCode(code: Integer);
begin
  case code of
    // 1. Correspondência de valor único + múltiplas linhas com begin end (Enter ASCII=13)
    13: begin
      Writeln('======== Tecla Enter Especial ========');
      Writeln('Código ASCII: 13 Caractere de controle retorno de carro');
      Writeln('=======================================');
    end;

    // 2. Múltiplos valores discretos separados por vírgula: todos caracteres de controle 0-12, 14-31
    0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
      Writeln('Tipo: Caractere de controle');

    // 3. Correspondência por faixa: algarismos 0~9 ASCII 48~57
    48..57: Writeln('Tipo: Algarismos 0-9');

    // Faixa: Letras maiúsculas A-Z
    65..90: Writeln('Tipo: Letras maiúsculas A-Z');
    // Faixa: Letras minúsculas a-z
    97..122: Writeln('Tipo: Letras minúsculas a-z');

    // 4. Ramo padrão else + múltiplas linhas com begin end (pontuação e símbolos)
  else
    begin
      Writeln('Tipo: Pontuação / Símbolo');
      Writeln('Código ASCII informado: ', code);
    end;
  end;
end;

var
  asciiNum: Integer;
begin
  Write('Informe um número ASCII entre 0 e 128: ');
  ReadLn(asciiNum);

  // Restringir intervalo de entrada
  if (asciiNum >= 0) and (asciiNum <= 128) then
    JudgeAsciiCode(asciiNum)
  else
    Writeln('O valor informado está fora do intervalo 0~128, inválido!');

  ReadLn;
end.Code language: PHP (php)

Para saber mais sobre códigos ASCII, consulte o artigo abaixo: ASCII table – Table of ASCII codes, characters and symbols

Julgamento condicional de múltiplos valores (instrução case)

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *