A Nemerle programozási nyelv

Utasítások, vezérlési szerkezetek



Értékadás, üres utasítás

A nyelvben üres utasítás nem létezik, mivel minden kifejezés, a ;-nek szeparátor szerepe van. Az értékadás hasonlóan működik, mint C#-ban, értéke void (nincs többszörös értékadás).

Szekvencia

A szekvencia elemeinek elválasztására a ; jelet használja a nyelv. A szekvenciát a {} jelöléssel jelöljük. Lehetőségünk van nevesített blokkok létrehozására is. A blokk nevét felhasználva definiálhatunk visszatérési értéket is. Például:

def a = factor : { mutable b = 1; for (mutable i = 2; i < 10; i++) { b = b * i; } factor(b) }

Ezzel a módszerrel szimulálhatjuk a break, continue és return utasításokat is.

Elágazás

A Nemerle több elágazást ismer. Első fajtája a klasszikus if utasítás, mely abban különbözik a legtöbb C alapú nyelvekben lévőtől, hogy kötelező az else ág kiírása. Szintaxisa:

if (<feltétel>) <kifejezés> else <kifejezés>

Ha nem kívánunk else ágat az elágazásban, akkor a when kulcsszót használhatjuk, ekkor elmarad az else ág, ileltve ha csak az else ágat szeretnénk, akkor az unless kulcsszó használatos.

A Nemerle nyelv nem ismeri a C# switch szerkezetét, helyette a match kifejezést használja, ami sokkal több lehetőséget nyújt a switch-nél. Szintaxisa:

match (<minta_kif>) { | <szelektor1> => <kifejezés1> | <szelektor2> => <kifejezés2> . . . | _ => <kifejezés_alapértelmezett> }

Pár használati eset a teljesség igénye nélkül:

match(n) { | 1 => System.Console.WriteLine("egyenlő 1-gyel"); // konstanshoz illesztés | x => System.Console.WriteLine("egyenlő x-szel"); // változóhoz illesztés | _ => System.Console.WriteLine("semmi"); } match(f(12, 5)) // def f(x, y) { (x/y, x%y, y); } { | (2, 2, 5) => System.Control.WriteLine("Az eredeti szám a 12 volt!"); // tuple illesztés } match(obj) // class A { public mutable a:int, public mutable b:int } { | A where (a = 5, b = 4) => 20; // típusértékhez illesztés }

További lehetőségek: típushoz illesztés, reguláris kifejezéshez illesztés.

Ciklus

Több fajta ciklus létezik a nyelvben, amelyek mindegyike macróval van definiálva, ezek közül a legfontosabbak: for, while, do .. while. Ezek a ciklusok ugyanúgy működnek, mint C#-ban. További ciklusok például:

repeat(n) <kif1> //Megismétli a kif1-et n-szer.

Vezérlésátadási utasítások

A Nemerlében implicite nem léteznek a return, break és continue utasítások, csak szimulálni lehet működésüket. Viszont a Nemerle.Imperative névtér használatával ezen utasítások is elérhetővé válnak.