3. hét    Nyelvi eszközök

Tartalom:

    3.1. Kifejezések
        3.1.1. Operátorok
                3.1.1.1. Aritmetikai operátorok
                3.1.1.2. Relációs operátorok
                3.1.1.3. Logikai operátorok
                3.1.1.4. Léptető operátorok
                3.1.1.5. Értékadó operátorok
                3.1.1.6. Egyéb operátorok         
    3.2. Deklarációs és végrehajtható utasítások      
    3.3. Alprogramok
        3.3.1. Eljárás
        3.3.2. Függvény
    3.4. Blokk   
    3.5. Tesztkérdések
    3.6. Feladatok

 

3.1.   Kifejezések (operandusok és operátorok)

A kifejezések szintaktikai eszközök, arra valók, hogy a program egy adott pontján ismert értékekből új értékeket határozzunk meg. Két komponense van típus és érték.

Alapvetően kétféle feladata van: végrehajtani a számításokat, és visszaadni a számítás végeredményét.

Összetevők:

ˇ Operandusok: Az értéket képviselik. Lehet literál, nevesített konstans, változó vagy függvényhívás az operandus.

ˇ Operátorok: Műveleti jelek (pl. *,  /,  +,  -).

ˇ Kerek zárójelek: A műveletek végrehajtási sorrendjét befolyásolják.

Példa a kifejezésre:

a

+

sin(0)

Operandus

Operátor

Operandus

Attól függően, hogy egy operátor hány operandussal végez műveletet, beszélhetünk:

ˇ egyoperandusú (unáris pl. (+2)),

ˇ kétoperandusú (bináris pl. (2+3)) vagy

ˇ háromoperandusú (ternáris pl. (a*b*c)) operátorokról.

3.1.1.    Operátorok:
           
(Az operanduson hajtanak végre egy műveletet.)

3.1.1.1.    Aritmetikai operátorok: Alapvető matematikai műveletek végzésére használjuk őket.


+    (összeadás),
-     (kivonás),
*    (szorzás),
/     (osztás),
%   (maradékképzés).

Példa az aritmetikai operátorok használatára:

 

Implicit konverzió: Amikor egy aritmetikai operátor egyik operandusa egész a másik pedig lebegőpontos, akkor az eredmény is lebegőpontos lesz. Az egész érték implicit módon lebegőpontossá konvertálódik, mielőtt a művelet végrehajtódna.

Példa: Egy egész számot osztunk egy valós számmal, a végeredmény automatikusan valós lesz.

A konverziót ki is "kényszeríthetjük" explicit konverzióval. A programozó ebben az esetben a kifejezés értékére "ráerőltet" egy típust.

Szintaxis:

(<típus>) <kifejezés>

Példa:
6/4  >> eredmény: 1 (Itt két egész számot osztottunk egymással.)
(double) 6/4  >> eredmény: 1.5

3.1.1.2.    Relációs operátorok: Összehasonlítanak két értéket, és meghatározzák a köztük lévő kapcsolatot.


>      (nagyobb),
>=    (nagyobb vagy egyenlő),
<      (kisebb),
<=    (kisebb vagy egyenlő),
= =   (egyenlő),
! =    (nem egyenlő).
 

Példa a relációs operátorok használatára:

 

3.1.1.3.    Logikai operátorok:


&&    (logikai és),
||      (logikai vagy),
!       (logikai nem),
&      (bitenkénti és),
|       (bitenkénti vagy),
^      (bitenkénti nem),
~      (Bitenkénti tagadás (negáció)).

Példa a logikai operátorok használatára:


 

3.1.1.4.    Léptető operátorok: A léptető operátorok bitműveleteket végeznek, a kifejezés első operandusának bitjeit jobbra, vagy balra léptetik.


<<    (op1 << op2; op1 bitjeit op2 értékével balra lépteti, jobbról nullákkal tölti fel)
>>    (op1 >> op2; op1 bitjeit op2 értékével jobbra lépteti, balról a legnagyobb helyértékű bitet tölt fel)
>>>  (op1 >>> op2; op1 bitjeit op2 értékével jobbra lépteti, balról nullákkal tölt fel)
 

3.1.1.5.    Értékadó operátorok


= Alap értékadó operátor, arra használjuk, hogy egy változóhoz értéket rendeljünk.

Rövidített értékadó operátorok: + =,  - =,  * =,  / =,  % =,  & =,  | =,  ^ =,  << =,  >> =, >>> =       (pl. i = i + 1; rövidítve: i + = 1;)
 

Példa az értékadó operátorok használatára:

 

3.1.1.6.    Egyéb operátorok:


? :     Feltételes operátor.
[ ]     Tömbképző operátor.
.        Minősített hivatkozás.
new   Új objektum létrehozása.
 

A kifejezés alakja lehet:

ˇ prefix: Az operátor az operandusok előtt áll (* 2 5).

ˇ infix: Az operátor az operandusok között áll (2 * 5).

ˇ postfix: Az operator az operandusok mögött áll (2 5 *).

Azt a folyamatot, amikor a kifejezés értéke és típusa meghatározódik, a kifejezés kiértékelésének nevezzük. A kiértékelés során adott sorrendben elvégezzük a műveleteket, előáll az érték, és hozzárendelődik a típus.

A Javában a következő módon megy végbe a kiértékelés:

ˇ Zárójelezéssel meghatározhatjuk, hogy egy kifejezés hogyan értékelődjön ki.
pl. (x + y) / 2 Először a zárójelben szereplő kifejezés hajtódik végre.

ˇ Ha nem jelezzük, hogy milyen sorrendben akarjuk, az összetett kifejezést kiértékelni, akkor a sorrendet az operátorok precedenciája fogja meghatározni. A magasabb precedenciával rendelkező operátorok hajtódnak végre elsőként.
ˇ pl. x + y / 2 Ebben a kifejezésben, mivel az osztás precedenciája magasabb mint az összeadásé, ezért először ez hajtódik végre, majd az összeadás következik. A következő kifejezés egyenértékű vele:
 x + (y / 2).

Operátor precedencia szintek:

postfix expr++  expr--
unáris ++expr  --expr  +expr  -expr  ~  !
multiplikatív *  /  %
additív +  -
léptetés <<  >>  >>>
relációs <  >  <=  >=  instanceof
egyenlőség = =   != 
bitenkénti és &
bitenkénti kizáró vagy ^
bitenkénti vagy |
logikai és & &
logikai vagy | |
feltételes ? :
értékadás =  +=  -=   *=   /=   %=   &=   ^=   |=   <<=   >>=  >>>=

A táblázat a Java platformon használt operátorok precedencia szintjeit mutatja be. Az operátorok precedencia szint szerint vannak rendezve, mégpedig úgy, hogy legfelül a legnagyobb precedenciájú, legalol a legkisebb precedenciájú található. Az azonos szinten elhelyezkedő operátorok azonos precedenciával rendelkeznek. Ha azonos precedenciájú operátorok szerepelnek egy kifejezésben, akkor balról jobbra történik a végrehajtás, kivéve az értékadó operátorokat, amelyek jobbról balra hajtódnak végre.

Azt a kifejezést, amelynek értéke fordítási időben eldől konstans kifejezésnek nevezzük. Létrehozására a final módosítót használjuk, így érjük el, hogy az adattag értékét nem változtathatja meg senki.
pl.
final double PI: Pi értékét jelenti.

3.2.   Deklarációs és végrehajtható utasítások

A deklarációs utasítások mögött nem áll tárgykód. A programozó a névvel rendelkező saját programozási eszközeit tudja deklarálni.

pl. int i=10;

A végrehajtható utasításokból generálja a fordító a tárgykódot.

Melyek ezek?

ˇ Üres utasítás (pl. ;)

ˇ Kifejezés utasítás (pl. 8;  a = b;)

ˇ Vezérlő utasítások (szekvencia, feltételes utasítás, többszörös elágaztatás, ciklusok, vezérlésátadó utasítások)

ˇ Módszerhívások (metódushívások)

ˇ Objektumot létrehozó kifejezések

 

3.3.   Alprogramok

A programot célszerű kisebb egységekre (alprogram) bontani, melyeket a program bizonyos pontjairól aktivizálhatunk. Így áttekinthetőbbé, olvashatóbbá válik a forrásprogram, valamint a többször előforduló tevékenységeket elegendő egyszer megírni (elkészíteni).

A Javaban metódusnak nevezzük az alprogramot. A metódus utasítások összessége, melyet meghívhatunk a metódus nevére való hivatkozással.

Egy metódus lehet eljárás vagy függvény aszerint, hogy van-e visszatérési értéke.

3.3.1.    Eljárás

Az eljárásnál nincsen visszatérési érték, egyszerűen végrehajtódik az eljárás nevére való hivatkozással. A végrehajtás után a program azzal az utasítással folytatódik, amelyik az eljárást meghívó utasítást követi. Az eljárás visszatérési típusa void (semleges), ami azt jelenti , hogy a visszatérési típus nincs definiálva.

Példa az eljárásra:

(Az eljárás egy vonalat "rajzol" a képernyőre.)

3.3.2.    Függvény

A függvénynél van visszatérési érték. A függvényt is egyszerűen a nevére való hivatkozással hívunk meg, de visszaad egy értéket, melyet a függvény neve képvisel.

Példa a függvényre:

(A függvény megduplázza az x változó értékét.)

 

3.4.   Blokk

A blokk nulla vagy több utasítás kapcsos zárójelek között, amely használható bárhol, ahol az önálló utasítások megengedettek.

Jellemzői:

ˇ { } zárójelek között szerepel.

ˇ Címkézhető.

ˇ Tetszőleges mélységben egymásba skatulyázható.

ˇ A változó a blokk lokális változójaként deklarálható.

ˇ A blokkon belül tetszőleges a deklarációs- és végrehajtható utasítások sorrendje.

 

3.5.   Tesztkérdések

3.6.   Feladatok

3.6.1.    Készíts egy eljárást, amely egy fenyőfát rajzol a konzolra. (megoldás)
 

3.6.2.    Készíts egy függvényt, amely összead két számot. (megoldás)
 

3.6.3.    Mi lesz a következő program outputja:

public class Feladat7{

    public static void main(String[] args) {

        int x=1;

        int y=4;

        System.out.println(x+"+"+y+"="+z);

    }

 }

(megoldás)

3.6.4.    Add meg a kifejezés  (a / 2) + 2 * b  zárójel nélküli alakját! (megoldás)
 

3.6.5.    Készíts programot, ami bemutatja a normál és a maradékos osztás közötti különbséget. (megoldás)