Instrukcja wyboru

Instrukcja wyboru, instrukcja decyzyjna – instrukcja w określonym języku programowania, umożliwiająca wybór instrukcji do wykonania spośród wielu opcji.

Działanie i stosowanie instrukcji wyboru

Instrukcję wyboru stosuje się w programach, w których należy wybrać jedną spośród wielu opcji, np. w Pascalu.

  case x of
    1, 2, 3 :
      begin
        instrukcje-1
      end;
    4 :
      begin
        instrukcje-2
      end;
    else
      instrukcje-else
  end;

Wybór określonego kodu następować może na podstawie różnych kryteriów:

  • numeru instrukcji lub elementu na liście,
  • wartości pewnego wyrażenia,
  • warunków logicznych.

Składnia instrukcji wyboru

Składnia instrukcji wyboru różni się w zależności od języka programowania, lecz można wyróżnić w niej charakterystyczne elementy:

  • nagłówek instrukcji wyboru:
    • słowo kluczowe rozpoczynające instrukcję (np. case, select, switch)
    • opcjonalnie wyrażenie, na podstawie którego następuje wybór
    • słowo łączące (np. of, do)
  • ciało instrukcji wyboru:
    • kolejne instrukcje podlegające selekcji
    • opcjonalnie poprzedzone frazami zawierającymi wartości porównywane z wyrażeniem z nagłówka instrukcji
      • opcjonalnie poprzedzone słowem kluczowym (np. case, when)
      • wyrażenie stałe lub lista takich wyrażeń, albo zakresów wartości (np. 1, zm, 7..12)
      • słowo lub symbol łącznika (np. :, =>, do)
    • opcjonalnie fraza domyślna, wykonywana gdy żadna z fraz nie spełni warunku (np. else, otherwise, other, default, when else)
  • koniec instrukcji wyboru – słowo zamykające blok (np. end, end case, end select itp.).

Języki programowania

Ada

  • instrukcja wyboru
  case wyrażenie is
    when war-1 => instr-1
    […
    when war-n => instr-n]
    [when others => instr-oth]
  end case;
  • instrukcja nadzorowana – wyboru wejścia
  select
    when war-1 => instr-1
    [or ...
     or when war-n => instr-n]
  end select;

Algol 68

Wybór według numeru instrukcji.

 case wyrażenie of
   begin
     instrukcja-1
     ...
     instrukcja-n
   end

Basic

Wybór zależny jest od numeru instrukcji:

 ON wyrażenie GOTO lista_etykiet

C, C++

W języku C występuje instrukcja decyzyjna switch o składni:

  switch([warunek]) instrukcja;
  // gdzie instrukcja jest najczęściej [[Instrukcja blokowa|instrukcją grupującą]] zawierającą frazy case i default:
  {
    case wyr-stałe-1 : instrukcje-1
    [...
    case wyr-stałe-n : instrukcje-n]
    [default : instrukcje-default]
  }

W odróżnieniu od instrukcji wyboru implementowanych w większości języków programowania, w instrukcji decyzyjnej języka C wykonywane są wszystkie instrukcje występujące po właściwej frazie case, także instrukcje występujące w następnych frazach case i default. Z tego względu jeżeli występuje konieczność ograniczenia zakresu wykonywania instrukcji należy zastosować instrukcję opuszczenia break.

  switch(x)
    {
      case 1 : instr-1;
      case 2 : instr-2; break;
      case 3 : instr-3;
    }

W powyższym przykładzie instrukcji switch, jeśli x=1 to wykonane zostaną instr-1 i instr-2, a jeżeli x=2 to tylko instr-2, gdyż instrukcja opuszczenia break spowoduje zakończenie wykonywania instrukcji zawartych w grupie switch.

Clipper

W języku Clipper instrukcja wyboru uzależniona jest od spełnienia określonego warunku:

 DO CASE
   CASE war-1
     instrukcje-1
   [...
   CASE war-n
     nstrukcje-n]
   [OTHERWISE
     instrukcje-other
 END [CASE]

Comal

 CASE wyr OF
   WHEN war-1
     instrukcje-1
   [...
   WHEN war-1
     instrukcje-1]
   [OTHERWISE
     instrukcje-oth]
 ENDCASE

Fortran

  GO TO ([[Etykieta (informatyka)|etykieta]]-1, , etykieta-n) zmienna_integer;

Icon

 case wyrażenie of {
   war-1 : instr-1
   [...
   war-n : instr-n]
   [default : instr-default]
 }

Modula 2

 CASE wyrażenie OF
   wartość-1 : instrukcje-1 |
   [... |
   wartość-n: instrukcje-n] |
   [ELSE instrukcje-else]
 END

Pascal

W Pascalu wybór uzależniony jest podobnie jak w języku C od wartości określonego w nagłówku instrukcji wyrażenia. Jednak w języku Pascal wykonanie instrukcji ograniczone jest do wybranej frazy.

  case wyrażenie of
    lista_wartości_1 : instrukcja-1
    [...
    lista_wartości_n : instrukcja-n]
    else instrukcja-else
  end;

PL/1

 SELECT(wyrażenie);
   WHEN(lista_wyrażeń-1) instrukcja-1;
   [...
   WHEN(lista_wyrażeń-n) instrukcja-n;]
   [OTHERWISE instrukcja-oth;]
 END;

PL/M

Wybór uzależniony od numeru instrukcji.

 DO CASE wyrażenie;
   instr-1;
   […
    instr-n;]
  END;

Simula 67

 inspect w when w1 do i-1;
        [...
         when wn do i-n;]
        [otherwise i-oth;]

Visual Basic

  • wybór zależny od wartości wyrażenia
  Select Case wyrażenie
    Case lista_wyrażeń_1
      instrukcje-1
    [...
        Case lista_wyrażeń_n
      instrukcje-n]
    [Case Else
      instrukcje-else]
  End Select
  • wybór zależny od numeru instrukcji (przejęta z języka Basic)
  ON wyrażenie GOTO lista_etykiet

Zobacz też