A Groovy programozási nyelv

Vezérlési szerkezetek

4. Vezérlési szerkezetek

A Groovy támogatja az összes Javában megismert vezérlési szerkezetet. Ezen felül a closureok miatt a felhasználó is tetszőleges vezérlési szerkezetet megvalósíthat. Ennek szellemében a Collection típusú objektumok támogatnak jópár nagyon kényelmes iterálási módot.
Üres utasítás

Groovyban nincs kifejezetten üres utasítás, így csak közvetetten írhatunk olyat. Üres utasítás, mint üres blokk:

{}
Pontosvesszőt, mint üres blokk:
;

Értékadás

Értékadás az = operátorral. Speciális esetekben pl. kollekcióknál a setAt()...
A nyelv dinamikus / statikus típusossága miatt, ha egy változónak nincs meghatározva a statikus típusa, akkor bármi értékül adható neki, ha meghatározott a statikus típusa, akkor csak akkor érvényes az értékadás, ha létezik konverzió a két típus között.

Szekvencia

A pontosvessző szekvenciák határánál lehet, de nem kötelező kitenni.

Elágazások

if{} [else if{}]* [else{}]? ismert szintaxis.

Ciklus

A hagyományos ciklus szintaxisa mellett

for (int i=0; i < len; i++) {...}
használhatók a következők is:
for (i in 0..len-1) {...}
for (i in 0..
len.times {...}

Switch

Vezérlési szerkezetek közül a switch különösen erős a rubyhoz hasonló szemantikát kapott. A Groovy beli switch visszafelé kompatibilis a Javas switchel. A különbség abban áll, hogy tetszőleges objektum lehet a switch értéke, és több féle illesztési módszer van a minta típusa alapján.

  1. Class típusú illesztési érték esetén az objektumot az instanceof operátorral hasonlítja.
  2. Reguláris kifejezések esetén illeszteni próbálja a string típusú objektumot.
  3. Collection típusú illesztési érték esetén tartalmazást vizsgál.
  4. Ha a fönti esetek közül egyik sem áll fenn, akkor az illesztési érték equals() függvénye alapján dönt.
def x = 1.23 def result = "" switch ( x ) { case "foo": result = "found foo" // lets fall through case "bar": result += "bar" case [4, 5, 6, 'inList']: result = "list" break case 12..30: result = "range" break case Integer: result = "integer" break case Number: result = "number" break default: result = "default" } assert result == "number"

A case utasítás az illeszkedést a case érték isCase(switchValue) metódusa alapján végzi, ami alapértelmezésben egy equals(switchValue) hívásnak felel meg, de felül lett definiálva a fent említett típusokra. Ebből következik, hogy a felhasználó is felüldefiniálhatja az általa illeszteni kívánt osztályokban az isCase() metódust, hogy a saját illesztéseit megvalósítsa.

Blokkok

Groovyban is létrehozhatunk blokkokat, a try{ ... } segítségével. Az ezen belül definiált változók a blokkon kívül nem láthatók. Viszont a 'def' kulcsszó használata nem kötelező. Ha nem használjuk a 'def'-et változó nevének definiálásakor, akkor az a változó a blokkon kívül is látható marad.
példák:

def a = 'good morning' try{ def b = 'greetings', c = 'nice day' //'def' kulcsszó 'b'-re és 'c'-re is vonatkozik assert a == 'good morning' assert b == 'greetings' d = 6 assert d == 6 //def kulcsszó opcionális } assert a == 'good morning' //println b //ez fordítási hiba lenne: b nem látható itt assert d == 6 //a blokkon kívül is látható
Természetesen a látható változó neveit nem definiálhatjuk újra.
Blokkok egymásba ágyazhatóak:
def a = 123 try{ try{ try{ assert a == 123 } } }