Else

pregusia

else - słowo kluczowe języka Delphi używane w połączeniu z instrukcjami warunkowymi

Angielskie słowo else można w tym kontekście przetłumaczyć jako w przeciwnym wypadku. Konstrukcja else jest zawsze stosowana w połączeniu z instrukcją If..Then oraz Case..Of.

Jeżeli, przykładowo, dany warunek if nie został spełniony, można odpowiednio na to zareagować, dodając blok else. Oczywiście wszystko najlepiej wyjaśnić na przykładach ? napiszmy zatem przykładowy program. Pobiera on imię użytkownika; w wypadku gdy warunek nie zostanie spełniony, odpowiednio zareaguje:

program Foo;

{$APPTYPE CONSOLE}

var
  Imię : String;
  
begin
  Writeln('Wpisz swoje imię...');
  Readln(Imię);  // pobranie wpisanej wartości

  if Imię = 'Zbigniew' then
    Writeln('Super! Ja też mam na imię Zbigniew!') // <?? uwaga! Brak średnika!
  else Writeln('Cześć ' + Imię);

  Readln;
end.

W poprzedniej wersji tego programu to, czy zmienna Imię nie zawiera wartości Zbigniew, było sprawdzane w kolejnym warunku if. Teraz w przypadku, gdy zmienna nie będzie zawierać tej wartości, zostanie wyświetlony tekst powitalny. Wszystko możliwe jest za sprawą instrukcji else.

Zauważmy, że w wierszu nad instrukcją else nie ma średnika na końcu! To jest właśnie ta wyjątkowa sytuacja, kiedy nie stawiamy średnika!

Stosowanie średnika w instrukcji else

Poprzedni przykład z użyciem instrukcji if i else zawierał instrukcję niezakończoną znakiem średnika. Istnieją jednak sytuacje, kiedy średnik jest wymagany ? bez niego program nie zostanie skompilowany. Kiedy więc stosować średnik, a kiedy nie? Poniższy fragment kodu już wymaga postawienia średnika przed else:

  if Imię = 'Zbigniew' then
  begin
    { jakaś inna instrukcja }
    Writeln('Super! Ja też mam na imię Zbigniew!');
  end else Writeln('Cześć ' + Imię);

Także w przypadku, gdy po słowie then stosujemy blok Begin..End, średnik musi znaleźć się w kodzie! Ale zasada pozostaje taka sama ? nie stosujemy go przed else:

end else Writeln('Cześć ' + Imię);

Sprawa początkowo może wydać się nieco skomplikowana, ale po dokładniejszym przeanalizowaniu kodu można rozróżnić, kiedy należy stosować średnik na końcu, a kiedy nie.

Kilka instrukcji if i else

Możliwe jest połączenie kilku instrukcji if oraz else. W takim przypadku stosujemy następującą konstrukcję:

else if { warunek }

Jeżeli jeden warunek nie zostanie spełniony, nastąpi sprawdzenie drugiego. Jeżeli także drugi nie zostanie spełniony ? analizowane będą kolejne warunki. Spójrz na poniższy kod:

program Foo;

{$APPTYPE CONSOLE}

var
  I : Integer;
  
begin
  Randomize;
  I := Random(50);

  if i = 10 then Writeln('I = 10')
  else if i = 20 then Writeln('I = 20')
  else if i = 30 then Writeln('I = 30')
  { kod w wykonany przypadku, gdy żaden warunek nie zostanie spełniony }
  else Writeln('Żadna wartość nie jest odpowiednia!');

  Readln;
end.

Na samym początku następuje sprawdzenie, czy wylosowaną liczbą jest 10. Jeśli nie, to program sprawdza kolejno liczby 20 i 30, co zapisano w kolejnych warunkach if. Jeżeli żaden z poprzednich warunków nie zostanie zrealizowany, zostanie wykonany kod umieszczony po słowie else.

Instrukcja else w case..of

Możliwe jest także zastosowanie słowa kluczowego else w instrukcji case..of. Jeżeli żaden ze sprawdzanych warunków Case nie zostanie spełniony, można odpowiednio na to zareagować. Posłużę się jednym z poprzednich przykładów.

program Foo;

{$APPTYPE CONSOLE}

var
  Mandat : Integer;

begin
  Randomize;
  Mandat := Random(100)+1; // dodajemy 1, aby nie zostało wylosowane 0

  case Mandat of
    1..10: Writeln('E, 10 zł. Może jeszcze zapłacę?');
    11..20: Writeln('20 zł ? nie będę miał na chleb!');
    21..50:
    begin
      Writeln('50 zł ? Panie władzo... może dogadamy się w inny sposób?');
      Writeln('Nieeeee...');
    end;
      { dodajemy else }
    else Writeln('Jakiś inny mandacik?'); 
  end;

  Readln;
end.

Tym razem losowano liczbę z zakresu od 1 do 100. Dzięki temu instrukcja case może nie uwzględniać tej liczby ? zostanie wykonany blok kodu umieszczony po słowie kluczowym else.

Zobacz też:

2 komentarzy

@Azarien: możesz edytować artykuł i poprawić :)

Poniższy fragment kodu już wymaga postawienia średnika przed else - to jest nieprawda, autor artykułu najwyraźniej przykładu nie sprawdził.

Zasada jest prosta: bezpośrednio przed else nigdy nie stawiamy średnika. Natomiast bezpośrednio przed end średnik można postawić, ale nie jest on wymagany.