Értékadás
A Cobra programozási nyelvben a hagyományos, a = b szintaktikájú értékadáson túl egy a ?= b alakú értékadást is bevezettek a nyelv készítői, amely csak abban az esetben ad új értéket (b értékét) az a változónak, ha az az értékadás utasítás végrehajtásának pillanatában NIL értékű, azaz inicializálatlan volt. Tehát az a ?= b típusú értékadás szemantikája az alábbi pszeudokódéval ekvivalens:
if a==NIL then a=b
else skip;
Ez a nyelvi eszköz az inicializálatlan változók kezdeti értékének beállítását biztosítja, igen tömör formátumban megadva. Természetesen
b típusának mindkét értékadás esetében kompatibilisnek kell lennie
a típusával
A Cobra készítői igen fontos feladatnak találták, hogy a program futása közben fellépő null pointer exceptionök számát minimálisra redukálják, így született meg a kérdőjeles értékadás mellett a kérdőjeles paramétertípus megkülönböztetése, amely felvehet NIL értéket is, ellentétben a hagyományos típusokkal, melyek garantáltan nem lehetnek inicializálatlanok.
Emellett létezik a kérdőjeles
coalesce kifejezés is, szintaxisa
a ? b, amely a kérdőjellel elválasztott kifejezések közül az első nem NIL értéket adó kifejezésre értékelődik ki. Tehát a példában a kifejezés értéke
a értéke lesz, ha az nem NIL, különben pedig
b értéke. Ha mindkettő NIL, akkor a kérdőjeles kifejezés értéke is NIL.
#1. példa
print name ? 'NONAME'
# 2. példa
def foo(factor as decimal?)
factor ?= 1
# 3.példa
get name as String
return _name ? .getType.name
# 4.példa
name = if(employee.manager.name<>nil, employee.manager.name, 'NONAME')
name = employee.manager.name ? 'NONAME'
A 4. példában szereplő első megoldás akár kétszer is kiértékelheti a feltételt és kevésbé tömör, átlátható, mint a kérdőjelet használó megoldás.
Szekvencia
A több sorba írt szekvencia utasításokat a Cobrában nem szükséges pontosvesszővel vagy egyéb karakterrel elválasztani.
Elágazás
Az elágazás utasítást a következő szintaxissal adhatjuk meg:
if-statement =
if expression
statements
(else if expression
statements)*
[else
statements]
Az
if utasítás feltételtől függően választja ki a végrehajtandó kódblokkot.
Mint a példában is látható, a blokkszerkezetet Cobrában, a Pythonhoz hasonlóan, indentálással, behúzással jelölhetjük, nincs semmilyen „felesleges” karakter a blokkok jelzésére, ami jól átlátható, tömör kódot eredményez, azonban adott esetben komoly odafigyelést igényelhet a programozótól nagyobb kódrészletek írásakor, másolásakor.
Az
if utasításnak van egy
if kifejezés párja is, amely az első paraméterben megadott feltétel igaz értéke esetén az első, különben a második paraméterre értékelődik ki (hasonló ez a szerkezet a C szintaktikájú nyelvek
condition ? a : b eleméhez).
if(condition, texpr, fexpr)
A
condition feltétel minden esetben kiértékelődik, a megfelelő kifejezés pedig akkor, ha feltétel kiértékelése során nem lépett fel kivétel.
Az esetszétválasztásos elágazás a következő szintaxissal adható meg:
branch WHAT
on VALUE1 STATEMENTS1
on VALUE2 STATEMENTS2
[else STATEMENTS]
Ciklus
A while típusú ciklusok a következő módon adhatóak meg:
while-statement =
[post] while expression
statements
Mint látható, a hátul tesztelős ciklusok annyiban különböznek szintaktikailag az elől tesztelősöktől, hogy eléírjuk a
post kulcsszót a ciklusnak.
A for ciklusokkal végigiterálhatunk egy megfelelő objektumon, amely az
IEnumerable interface-t implementálja.
enumerable-for-statement =
for variable in expression
statements
for person in people
print person
A
for ciklusnak is van egy megfelelő
for kifejezés párja, amely végigiterál egy listán, és minden olyan esetben, amikor az aktuálisan vizsgált elemre teljesül a megadott feltétel, akkor egy másik listához hozzáfűz egy új elemet, melyet a for kifejezésben meghatározott szabály szerint képez az eredeti lista eleméből.
for var in ienumerable [where condition] get expr
for var in ienumerable where condition
t = for x in [1, 2, 3] where x>=2 get x*x
# `x` típusa int, `t` típusa List<of int>