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.
|