Paradygmaty
Paradygmaty
programowania
programowania
Wykład 4 – Wyrażenia i komendy
Wyrażenia
Wyrażenia
Większość języków programowania ma zaimplementowane
Wyrażenie
– konstrukcja języka programowania, która będzie
przetworzona w celu wyznaczenia jej wartości.
Większość języków programowania ma zaimplementowane
następujące rodzaje wyrażeń:
•
literały
•
konstrukcje
•
wywołanie funkcji
•
wyrażenia warunkowe
•
dostęp do stałych i zmiennych
Wyrażenia
Wyrażenia –
– literały i konstrukcje
literały i konstrukcje
Literały
– najprostszy rodzaj wyrażania oznaczający ustaloną,
stałą wartość pewnego typu
1 3.14 ”ala” 1/2 false
Konstrukcje
– wyrażenie tworzące wartość złożoną z jej wartości
składowych.
C++: int lDni[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 31, 30};
ADA: lDni: array (Miesiace) of Integer :=
(feb => 28, apr|jun|sep|nov => 30, others => 31);
Haskell: [31, if przest(rok) then 29 else 28, 31, 30, 31, 30, 31,
31, 30, 31, 30, 31]
Wyrażenia
Wyrażenia –
– wywołanie funkcji
wywołanie funkcji
Wywołanie funkcji
– oblicza wynik poprzez zastosowanie
procedury funkcyjnej (lub metody) do jednego lub wielu
argumentów.
Wywołanie funkcji najczęściej przyjmuje formę:
F(E) lub F(E ,…,E )
F(E) lub F(E
1
,…,E
N
)
W niektórych językach np. Scheme wywołanie funkcji przyjmuje inną formę:
(F E
1
E
2
… E
N
)
W przypadku języków, w których funkcje są wartościami pierwszej klasy
(np. Scheme) F może być wyrażeniem np.
((if (…) sin cos) x))
Wyrażenia
Wyrażenia -- operatory
operatory
Operatory
Operatory mogą być traktowane podobnie jak funkcje.
Zastosowanie jedno lub dwu argumentowego operatora jest
równoznaczne z wywołaniem funkcji z jednym lub dwoma
równoznaczne z wywołaniem funkcji z jednym lub dwoma
argumentami.
W jezykach programowania można spotkać dwie notacje zpisu
operatorów:
• infiksowa – większość języków programowania.
• prefiksowa – Lisp i jego dialekty (np. Scheme)
Wyrażenia warunkowe
– wyrażenia warunkowe obliczają
wartość, która jest zależna od zadanego warunku.
Zawierają w sobie dwa lub więcej podwyrażeń, z których
Wyrażenia
Wyrażenia
Zawierają w sobie dwa lub więcej podwyrażeń, z których
dokładnie jedno wybierane jest do obliczenia warunku.
C++:
int max = x>y ? x : y;
Wyrażenia
Wyrażenia –
– dostęp do stałych i zmiennych
dostęp do stałych i zmiennych
Dostęp do stałej
jest to odniesienie do nazwanej stałej i zwraca
jej wartość.
Dostęp do zmiennej
jest to odniesienie do nazwanej zmiennej
Dostęp do zmiennej
jest to odniesienie do nazwanej zmiennej
i zwraca obecną wartość tej zmiennej.
C++:
const float pi = 3.14;
float r, pole;
pole = pi * r *r;
Wyrażenia z efektem ubocznym
Wyrażenia z efektem ubocznym
W przypadku
wyrażenia z efektem ubocznym
oprócz
wyznaczenia jego wartości, modyfikowane są również
wartości pewnych zmiennych.
enum Token {litera, cyfra, inny};
Token t;
if((getchar(f) >= ‘a’ && getchar(f) <= ‘z’) ||
(getchar(f) >= ‘A’ && getchar(f) <= ‘Z’))
t = litera;
else if(getchar(f) >= ‘0’ && getchar(f) <= ‘9’)
t = cyfra;
else
t = inny;
Wyrażenia blokowe
Wyrażenia blokowe
Wyrażenie blokowe
jest wyrażeniem, które zawiera pewne
lokalne deklaracje i podwyrażenia.
Wiązania stworzone przez deklaracje służą jedynie do
wyznaczenia
wartości
podwyrażeń
i
całego
wyrażenia
blokowego.
blokowego.
float PoleKola(float r)
{
const float pi = 3.14;
return pi * r * r;
}
Komendy
Komendy
Komenda
– jest konstrukcją programu, która będzie wykonana
w celu zmodyfikowania wartości zmiennych.
Komendy są charakterystyczną cechą języków imperatywnych
i ich pochodnych (obiektowych i konkurencyjnych).
i ich pochodnych (obiektowych i konkurencyjnych).
Komendy
Proste
Złożone
Blokowe
Obsługi
wyjątków
Komendy proste
Komendy proste
Wyróżniamy następujące rodzaje
komend prostych
:
•
komenda pusta
– najprostszy rodzaj komendy, nie mającej żadnego
efektu
•
przypisanie
–
najczęściej
przyjmuje
formę
V
=
E
lub
•
przypisanie
–
najczęściej
przyjmuje
formę
V
=
E
lub
V
:=
E
, gdzie E jest wyrażeniem zwracającym wartość, a V
dostępem do zmiennej, który zwraca referencje do zmiennej.
•
wywołanie procedury
– komenda, która osiąga efekt przez
zastosowanie procedury (lub metody) na podanych argumentach.
Wywołanie
procedury
zazwyczaj
ma
formę
P(E
1
,…,E
N
).
Komendy złożone
Komendy złożone –
– komenda sekwencyjna
komenda sekwencyjna
Komenda sekwencyjna
– określa, że dwie lub więcej komend
jest wykonywanych w określonym porządku.
Komendy sekwencyjne najczęściej są zapisywane w formie:
C1; C2
co oznacza, że komenda C
1
jest wykonywana przed komendą C
2
Komendy złożone
Komendy złożone –
– komenda warunkowa
komenda warunkowa
Komenda warunkowa
– zawiera dwie lub więcej komend,
z których wykonywana jest tylko jedna, zgodnie z zadanym warunkiem
Najprostszą formą komendy warunkowej jest komenda if
if(E) C
1
else C
2
C++
Pascal
Często stosuje się skróconą wersję komendy warunkowej:
if(E) C
1
którą przedstawić można również w postaci:
if(E) C1 else ;
C++
Pascal
if(warunek)
komenda1;
else
komenda2;
if warunek then
komenda1;
else
komenda2;
Komendy złożone
Komendy złożone –
– komenda wyboru
komenda wyboru
Komenda wyboru
– jest bardziej ogólną formą komendy warunkowej.
Pozwala na wybranie jednej z wielu komend na podstawie sprawdzenia
wystąpienia wartości prostego i dyskretnego typu.
C++
Pascal
C++
Pascal
switch(E)
{
case v
1
: C
1
break;
case v
2
: C
2
break;
…
case v
n
: C
n
break;
default: C
0
}
case E of
v
1
: C
1
;
v
2
: C
2
;
…
v
n
: C
n
;
else
C
0
;
end;
Komenda iteracyjna
– zawiera komendy, które są wykonywane wielokrotnie.
Ze względu na liczbę powtórzeń, komendy iteracyjne można podzielić na:
•
zdefiniowane – liczba powtórzeń jest ściśle określona z góry:
for
•
niezdefiniowane – liczba powtórzeń nie jest ściśle określona z góry
np.
while
,
do while
.
Komendy złożone
Komendy złożone –
– komenda iteracyjna
komenda iteracyjna
while
do while
for
while(E) C
≡
≡
≡
≡
if(E)
{
C
while(E) C
}
do C while(E);
≡
≡
≡
≡
C
while(E) C
for(C
1
;E
1
;E
2
)
C
2
;
≡
≡
≡
≡
C
1
while(E
1
) {
C
2
E
2
;
}
Komenda iteracyjna: while
C++
Pascal
while(E)
C;
while E do
C;
Komendy złożone
Komendy złożone –
– komenda iteracyjna
komenda iteracyjna
while(E)
{
C
1
;
C
2
;
}
while E do
begin
C
1
;
C
2
;
end;
Komendy złożone
Komendy złożone –
– komenda iteracyjna
komenda iteracyjna
Komenda iteracyjna: do while
C++
Pascal
do
C;
while(E);
repeat
C;
until E;
while(E);
do
{
C
1
;
C
2
;
}
while(E);
until E;
repeat
C1;
C2;
until E;
Komendy złożone
Komendy złożone –
– komenda iteracyjna
komenda iteracyjna
Komenda iteracyjna: for
C++
Pascal
for(C1; E1; E2)
C2;
for v:=E
1
to E
2
do
C;
for(C1; E1; E2)
{
C2;
C3;
}
for v:=E
1
to E
2
do
begin
C1;
C2;
end;
Komendy złożone
Komendy złożone –
– komenda iteracyjna
komenda iteracyjna
Komenda iteracyjna: for / foreach
W niektórych nowoczesnych językach programowania tj. Java, C# można
odnaleźć dodatkową postać komendy iteracyjnej for pozwalającej na przejście
po wszystkich elementach pewnej kolekcji.
Java
C#
Java
C#
for(T v : E)
C;
for(Date date : dates)
System.out.println(date);
foreach(T v in E)
C;
foreach(Date date in dates)
Console.WriteLine(
date.toString());
Komendy blokowe
Komendy blokowe
Komenda blokowa –
jest rodzajem komendy, która zawiera
lokalne deklarację (lub grupę deklaracji) oraz inne komendy.
Wiązania powstałe w wyniku tych deklaracji służą wyłącznie
do wykonania komend zawartych w komendzie blokowej.
C++
Pascal
for(C1; E1; E2)
{
C2;
C3;
}
for v:=E
1
to E
2
do
begin
C1;
C2;
end;