A Pliant nyelv

Függvények és Metódusok

Bevezető

A függvény, akár csak a metódus egy speciális Pliant kifejezés, amit procedurális definíciónak hívunk. Ez valójában egy azonosítót rendel egy kifejezéshez. Az azonosító az eljárás neve, a kifejezés pedig az eljárás törzse. Az eljárásoknak (függvény, metódus) lehet, de nem szükséges, hogy visszatérési értékük legyen.

Egyes azonosítók, amelyek a procedurális definícióban jelennek meg, az eljárás paramétereinek hívjuk, amely magában foglalhatja a visszatérési értéket is. Mostantól eredménynek hívjuk azt a paramétert, amelyik a visszatérési értéket képviseli és valós paraméternek a többit.

A függvények és a metódusok közti különbségek

A Szintaxis szempontjából a függvények és a metódusok a következőkben térnek el: a függvényekben a paraméterek a függvény nevét követik, míg a metódusokban az első valós paraméter jön elsőnek, majd a metódus neve és csak ezután jön a többi paraméter. Tehát a metódusnak legalább egy paramétere kell, hogy legyen.

Ami a metódusok, és a függvények használatát illeti, a metódusokat általában információ kinyerésére használják, például az eljárás, amelyik egy sztringet kap első paraméterként, végigolvassa és visszaadja az előfordulását egy bizonyos karaktersorozatnak.

A függvényeket ellenben általában valami kiszámolására használják, amihez kellenek a paraméterek. Például a faktoriális kiszámítására olyan függvényt használnak, amelyek egy paraméterben átadott számra kiszámolja annak faktoriálisát.

Szintaxis

A függvény létrehozásának szintaxisa Pliantben:

function name [parameter...] [-> result]
  [parameter_declaration...]
  [other_procedure_attribute...]
  [body]

Metódust a következő szintaxissal hozunk létre:

method firstParameter name [parameter...] [-> result]
  parameter_declaration...
  [other_procedure_attribute...]
  [body]

Ahol:

arg_declaration Type parameter...

Ahol:

Paraméterátadás

Kidolgozásra vár.

Túlterhelés

A túlterhelést a Pliant alapvetően nem támogatja, mert a név és a szignatúra itt erősen összefügg.
Viszont bizonyos kulcsszavakkal más-más hatást lehet elérni névütközés esetén:

Kulcsszó Hatás
weak_definition Névütközés esetén a korábbi szignatúrát használja.
strong_definition Névütközés esetén ezt az új szignatúrát használja.
always_weak_definition Névütközés esetén ezt a szignatúrát sosem használja.
always_strong_definition Névütközés esetén mindig ezt a szignatúrát használja.

Rekurzió

A Pliant támogatja, hogy egy függvény a törzsében meghívja önmagát.

Példa:

function fact x -> y
  arg Int x y
  y := shunt x=0 1 x*(fact x-1)