Oxygene

Alprogramok, modulok



Forrásfájl szerkezete

A Pascal nyelvhez hasonlóan, itt is kötött a forrásfájl szerkezete. Három főbb részből áll:

namespace interface uses type <interface definition(s)> <class definition(s)> <record definition(s)> <arrays> <method definition(s)> const <> implementation uses types arrays const method implementation(s) classname.method implementation(s) end.

Főmetódus.

Minden futtatható programban kell hogy szerepeljen egy főmetódus (main method), ami a progam belépési pontja lesz. Főmetódus tetszőleges osztályban helyezkedhet el.

Class láthatóságú metódusnak kell lennie. Visszatérési értéke vagy Integer vagy semmi, első esetben ez a visszatérési érték a programhoz rendelt folyamat visszatérési értéke. Ami a metódus paramétereit illeti – vagy nulla paramétere lehet a főmetódusnak, vagy egy. Ha van paramétere, akkor csak String vagy array of String lehet, ami hozzáférést biztosít a parancssori paraméterekhez. Pl.:

class method Program.Main(Args: array of String): Integer; begin if Length(Args) <> 1 then begin Console.WriteLine('Filename expected!'); exit 1; end; RunWith(Args[0]); exit 0; end;

Alprogramok, függvények

Az Oxygene nyelvben nincsenek külön alprogramok és függvények, hanem csak osztálymetódusok, amik attól függően, hogy van visszatérési érték vagy nincs függvényként illetve alprogramként használható. Szintaxis: szintaxis, láthatóság, visszatérési érték, alprogram függvény

[class] method classname.methodname [parameters] [: result] ; begin [methodbody] end;

A metódusoknak az osztályhoz hasonlóan meg tudunk adni láthatóságot. (Részletesebben lásd az osztályok láthatóságánál). A "result" kulcsszó után lehet megadni a visszatérési értékeket.

Paraméterek

Három féle paramétert különböztetünk meg:

A paramétereket 3 féle képpen lehet deklarálni: Ha nem nem írunk a paraméter elé semmit, akkor az érték szerinti paraméter-átadásnak számít és a változások elvesznek a metódus visszatérése után.
Példák:

method Test1(a1: Word; const a2: String; var a3: Integer; out a4: Byte); method Test2(b1,b2: Word; const b3,b4: String; var b5,b6: Integer; out b7,b8: Byte); method Test3(c1: Word := 5; const c2: String := 'abc'; var c3: Integer := 8);

Iniline tömb paraméterek.

„params” kulcsszó segítségével olyan metódusokat deklarálhatunk, melyeknek paramétereinek száma változó. Ehhez utolsó paraméternek tömb típust adjuk és params kulcsszóval látjuk el. A hívó tetszőleges számú tömb típusával megegyező paramétert adhat meg és híváskor ezek a paraméterek automatikusan tömbbé konvertálódnak át.

Nem típusozott paraméterek (Untyped parameters)

Az Oxygene támogat nem típusozott paramétereket, de ez valóban System.Object típusú paramétert jelent.

Túlterhelés

Az Oxygene támogatja a túlterhelést, azaz lehet azonos nevű de különböző szignatúrával rendelkező metódusokat írni. Ekkor mindig a függvényhívásra legjobban illeszkedő hajtódik végre.

Operátor felüldefiniálás

A nyelv lehetőséget biztosít, arra hogy operátorokat definiáljuk illetve a már meglévőket felüldefiniáljuk. Például:

type ComplexNumber = class … public class operator Add(a: ComplexType; b: ComplexType): ComplexType; class operator Add(a: ComplexType; b: Int32): ComplexType; class operator Implicit(a: Int32): ComplexType; end;

Ezen kívül lehetőség van az ősosztály metódusainak felüldefiniálására is. A virtuális metódusok felülírása az "override" kulcsszóval lehetséges.

Rekurzió

A nyelv támogatja a rekurziót.