A Falcon programozási nyelv

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

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

Az értékadás balértéke csak és kizárólag változó lehet. A változó egy azonosítóval ellátott memóriaterület, amely mérete a benne lévő érték típusától függ. Egy változó tartalmazhat bármilyen típusú értéket (A Falcon típusai: NilType, BooleanType, IntegerType, NumericType, RangeType, MemBufType, FunctionType, StringType, ArrayType, DictionaryType, ObjectType, ClassType, MethodType, ClassMethodType, OpaqueType). Változónak számítanak még a tömbök és szótárak indexszel hivatkozott elemei (pl. array[3]) valamint az objektumok attribútumai is (pl myclass.attribute). Ha egy változó előtt a const szót használjuk, akkor annak csak egyetlen egyszer adhatunk értéket, se előtte, se utána.

Az értékadás jobb oldala szó szerint bármi lehet literál, kifejezés, másik változó, függvény neve, függvény visszatérési értéke, osztálynév, objektum,... Értékadáskor semmilyen típusellenőrzés nem történik, hiszen a változóknak nem csak az értékeknek van típusa. Ha egy operátor kifejezésben két különböző típusú változó szerepel, akkor automatikus konverzió történik (pl. 1.2 + 1 egyenlő 2.2, "1.2" + 1 egyenlő "1.21").

Az üres utasításnak nincs jele, illetve az jelzi, hogy az adott blokkba nem írunk semmit legfeljebb whitespace-eket.

Szekvencia

A szekvenciát két jellel is jelölhetjük. Egyrészt a sortörést minden esetben szekvenciát jelöl kivéve ha backslash található a sor végén, másrészt a ; vessző használható az utasítások elválasztására, a szekvencia jelölésére, ha egy sorban több utasítást is megadunk.

Elágazás

Három féle elágazás található a Falcon nyelvben. A legelső az if elágazás a következőképpen néz ki:

if expression statements... elif expression statements... elif expression statements... /* other elifs */ else statements... end
ahol az elif és az else ág opcionális. Egy egyszerű if-[else-]end elágazás a következőképpen rövidíthető:
<condition> ? <if true> [ : <if false>]
Ahol az else ágnak megfelelő jel opcionális.

A switch vezérlési szerkezet segítségével a sokágú if-elif-else-end elágazások rövidíthetőek. Szerkezete a következő:

switch expression case item [, item, .. item ] statements... case item [, item, .. item ] statements... /* other cases */ default statements... end
Előnye a hagyományos sokágú elágazással szemben hogy sokkal hatékonyabb sok eset esetén. Annyi kikötés van az expression-re hogy olyan kifejezésnek kell ott szerepelnie ami IntegerType vagy StringType típusú értéket eredményez. Az eseteknél szereplő item viszont lehet IntegerType, StringType, NilType típusú literál vagy ilyen értéket tartalmazó változó lehet, vagy Integer intervallum amit a to szóval jelölünk (pl. 1 to 12). A switch hatékonysága abban rejlik, hogy a virtuális gép bináris kereséssel keresi meg a megfelelő ágat nem pedig lineárisan, mint az if--elif-else-end szerkezet esetében. A Falcon switch utasítása mindig egyetlen ágat hajt végre, az esetek között nem lehet átfedés.

A select utasítás sokban hasonló a switchhez. Azonban itt kifejezés helyett egy változót adhatunk meg és az eseteknél pedig egy-vagy több típust. A select a változó aktuális értékének a típusa szerint választ esetet. A típus az előző fejezetben szereplő típusok egyike lehet.

Ciklus

A Falcon kétféle ciklust használ, az egyik az elöltesztelős while ciklus a másik pedig a hátultesztelős loop ciklus. A while ciklus:

while expression statements... [break] statements... [continue] statements... end
A while ciklus a törzsében szereplő utasításokat addig ismétli amíg az expression értéke igaz (az expression kifejezés értéke BooleanType vagy azzá konvertálhatónak kell hogy legyen). A while ciklusból elhagyható az end zárás, abban az esetben ha a törzs egyetlen utasításból áll és az egész ciklust egy sorba írjuk, ilyenkor a törzset és a feltételt a : jellel kell elválasztani.

A loop ciklus:

loop statements... [break] statements... [continue] statements... end expression
A loop ciklus addig hajtja végre a törzsében szereplő utasításokat, amíg az expression értéke hamis. Az expression el is hagyható, ekkor végtelen ciklust kapunk.

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

Az előző részben láthattuk, hogy a ciklus törzsében szerepelhet a break illetve a continue utasítás. A break utasítás félbehagyja a legbelső ciklus működését és a vezérlést az end utáni első utasításnak adja át, a program futása onnan folytatódik. A continue utasítás ezzel szemben a program futását a ciklusfeltétel ellenőrzésénél folytatja. A return utasítás az aktuális függvénytörzsből lép ki (az utána megadott értékkel ha van olyan). Ha nem egy függvény törzsében van a return utasítás, akkor a return befejezi az alkalmazás működését.