następny punkt »

1. Przegląd instrukcji sterujących
W anglojęzycznej literaturze informatycznej pojęcie instrukcji określa się słowem statement

Zanim zaczniemy omawiać instrukcje sterujące, warto wyraźnie powiedzieć co w ogóle znaczy pojęcie instrukcja, tym bardziej, że w większości instrukcji sterujących występują inne instrukcje "do wykonania".

Np. z opisiu instrukcji if :

if (war) ins;

dowiemy się, że zostanie wykonana instrukcja ins, jeśli warunek war jest prawdziwy.
Czym zatem może być ins ?

W różnych językach programowania jako instrukcje traktowane są różne konstrukcje gramatyczne - różne składniowo i semantycznie zapisy w programie

Intuicyjnie można sobie wyobrażać, że instrukcje są "czymś", co w trakcie działania programu "jest wykonywane". Instrukcje stanowią "motor" działania programu. Ich wykonanie powoduje odpowiednie przetwarzanie danych.
Zamiast kusić się o bardziej precyzyjną definicją powiemy raczej co w Javie jest instrukcją, a co nie.

W Javie instrukcjami są:

Rodzaj instrukcji
Instrukcja
Przykład
Instrukcja pusta
pojedynczy średnik
;
Instrukcje wyrażeniowa
uwaga: instrukcją
wyrażeniową jest jedno
z wymienionych obok wyrażeń
zakończone średnikiem






przypisanie;
a=b;
preinkrementacja;
++a;
postinkremetacja;
a++;
predekrementacja;
--a;
postdekrementacja;
a--;
wywołanie metody;
x.met();
met();
wyrażenie new;
new Para();
Instrukcja grupująca
uwaga:
po zamykającym nawiasie nie stawiamy średnika
dowolne instrukcje (i deklaracje zmiennych) ujęte w nawiasy klamrowe
{
a=b;
c=b;
}
Instrukcja etykietowana
etykieta: dowolna instrukcja

Konkretne
formy składniowe
i przykłady
poznamy zaraz







Instrukcje sterujące







if
if .. else
switch
while
do ... while
break
continue
return
zobacz
wykład 7
Instrukcja throw
Zob. wykład na temat wyjątków
Instrukcja synchronized
Wsparcie dla programowania współbieżnego (II semestr)

Żadna inna konstrukcja składniowa nie jest w Javie instrukcją

Zatem np:

  • deklaracja nie jest instrukcją, mimo, że kończy się średnikiem ( deklaracje nie są bowiem "wykonywane"; zauwazmy wszakże, że są poprawnym elementem składni, jeśli kończą się średnikiem; w przypadku wystąpienia inicjacji przy deklaracji, będziemy mieli do czynienia z instrukcją, wykonywaną w częsci inicjacyjnej deklaracji, nie uczyni to jednak z deklaracji instrukcji! )
  • wyrażenie a+b zakończone średnikiem (tak samo jak każde inne nie występujące na podanej wyżej liście instrukcji wyrażeniowych) - nie jest instrukcją (i spowoduje błąd w kompilacji; zatem gdy kompilator powie nam, że wjakimś wierszu występuję błąd nazwany "not a statement" - będziemy wiedzieć, że w nieparwidłowy sposón skonstruowaliśmy instrukcję programu)

Szczególnym rodzajem instrukcji są instrukcje sterujące.

Instrukcje sterujące odgrywają w programowaniu bardzo istotną rolę, bowiem pozwalają na zmianę sekwencji (kolejności) wykonania instrukcji programu.

Poniżej przedstawiono szybki przegląd instrukcji sterujących. Dalej omówimy je dokładnie.


Instrukcje sterujące

if (wyr)ins

Jeżeli wyrażenie wyr daje w ywniku true, to wykonywana jest instrukcja ins

if (wyr)ins1
elseins2

Jeżeli wyrażenie wyr daje w wyniku true, to wykonywana jest instrukcja ins1, w przeciwnym razie wykonywana jest instrukcja ins2

switch (wyr){
case ws1 : ins1 [ break;]
case ws2 : ins2 [ break;]
....
case wsN : insN [ break;]
default : insDef [ break;]
}

Instrukcja przeznaczona do wyboru z wielu wariantów.

Wyrażenie wyr musi być wyrażeniem całkowitym. Jego wynik jest porównywany po kolei z całkowitymi wyrażeniami stałymi (np. literałami lub stałymi), w przypadku zgodności wykonywana jest odpowiednia instrukcja po dwukropku. Jeśli żadne ze stałych wyrażeń nie pasuje do wyr wykonywana jest instrukcja w klauzuli default.

while (wyr)ins

Instrukcja ins wykonywana jest w pętli dopóki wartość wyrażenia wyr jest true

doinswhile (wyr);

Wykonywana jest instrukcja ins, następnie wyliczane wyrażenie wyr; jeśli daje wartość true - cały proces zaczyna się od nowa.

for (init; wyr; upd) ins

Dokonywana jest inicjacja init (może to być deklaracja zmiennej lub opracowanie listy wyrażeń, rozdzielonych przecinkami ); następnie w pętli wykonywane są następujące czynności: wyliczane jest wyrażenie wyr i jeśli jego wartość jest true wykonywana jest instrukcja ins, po czym wykonywana jest modyfikacja mod (opracowanie wyrażenia lub listy wyrażeń rozdzielonych przecinkami).
Elementy init, wyr, upd są opcjonalne

continue [ etykieta ];

Instrukcja ta przerywa wykonanie bieżącego kroku pętli for, while lub do.. while i rozpoczyna wykonanie kroku następnego, lub też przekazuje sterowanie do instrukcji opatrzonej etykietą (jeśli etykieta występuje)

break [ etykieta ];

Instrukcja powoduje przerwanie wykonania pętli, oprócz tego stosowana jest w ramach instrukcji switch

return wyr;

Instrukcja powoduje powrót z metody, zwracając wartość wynikającą z wyliczenia wyrażenia wyr; wyrażenie wyr może być opuszczone jeśli metoda nie zwraca żadnych wartości


Instrukcje (i deklaracje zmiennych) mogą być grupowane w bloki poprzez ujęcie ciągu instrukcji w nawiasy klamrowe { i }. Jest to tak zwana instrukcja grupująca. W każdym miejscu programu, gdzie może wystąpić pojedyńcza instrukcja, może również wystąpić blok - instrukcja grupująca (np. we wszystkich miejscach instrukcji sterujących, gdzie przewiduje się użycie instrukcji). Jest on wtedy traktowany jak pojedyncza instrukcja. Przykładowo możemy grupować instrukcje, które mają być wszystkie wykonane w przypadku wystąpienia jakiegoś warunku:

if (a > b) {
c = a + b;
d = a - b;
e = a*b;
}

Jak widać, po nawiasie klamrowym, zamykającym grupowanie instrukcji nie potrzebny jest średnik.


 następny punkt »