A J programozási nyelv

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

A J-ben a vezérlési szerkezetek kulcsszavai után mindig pontot kell tenni (pl.: if.).

Értékadás

A J nyelv nem tartalmaz klasszikus értelemben vett változókat. Nincs változó-deklarációt, egy kifejezést/a kifejezések eredményét azonosíthatunk egy névvel, melyre később hivatkozhatunk. Egy név hivatkozhat számra, karakterre, tömbre, listára, beépített altípusra, de még programra is, és bármikor új entitást rendelhetünk hozzájuk. Egy névhez a "=:" vagy a "=." jel segítségével rendelhetünk egy entitást. A "=:" globális, míg a "=." lokális (függvényeken belüli).

a =: 7 NB. az "a" név a 7 számot fogja azonosítani a =: 7 + 3 NB. az "a" név a 10 számot fogja azonosítani a =: '7 + 3' NB. az "a" név a "7 + 3" karaktersorozatot fogja azonosítani

Szekvencia

Az utasításokat nem zárja le pontosvessző. Egy sorban egy utasítás lehet, mely a sor végéig tart.

Elágazás

Csak scripteken, függvényeken belül tudjuk használni őket.

IF

Az if elágazások a következőképpen épülhetnek fel (T - feltételblokk, B - utasításblokk):

if. T do. B end. NB. Első verzió if. T do. B else. B1 end. NB. Második verzió if. T do. B elseif. T1 do. elseif. T2 do. B2 end. NB. Harmadik verzió

Ha a feltételblokkot üresen hagyjuk, akkor automatikusan igaznak értékelődik ki.
Példa:

if. 0 '<' y do. 'positive' elseif. 0 '>' y do. 'negative' elseif. do. 'zero' end.

Esetkiválasztásos elágazás

Az esetkiválasztásos elágazás a következőképpen épül fel (T - kifejezés, Ti - konstans-kifejezés, Bi - utasításblokk):

select. T case. T0 do. B0 case. T1 do. B1 fcase. T2 do. B2 case. T3 do. B3 end.

Ha egy case ágban egyezés van akkor lefut az odatartozó utasításblokk, s nem vizsgálja tovább a többi elágazást. Viszont, ha egy fcase ágban van egyezés, akkor miután lefut az odatartozó utasításblokk, megvizsgálja még a következő elágazást is.
Példa:

fv =: 3 : 0 t=.'' select. y case. 1 do. t=.t,'one ' fcase. 2 do. t=.t,'two ' case. 3 do. t=.t,'three ' fcase. 4 do. t=.t,'four ' end. ) fv 2

two three

Ciklus

Csak scripteken, függvényeken belül tudjuk használni őket.

For

A for ciklus a következőképpen épülhet fel (T - tömb aminek az elemeivel dolgozunk, B - utasításblokk):

for. T do. B end. for_címke. T do. B end.

A for ciklus inkább a C# foreach ciklusához hasonlít, mint a hagyományos for ciklushoz, hiszen T tömb összes elemén végrehajtja a B-ben levő utasításokat. Fel lehet címkézni. Meg lehet szakítani a break. kulcsszóval, illetve át lehet lépni egy elemen a continue. kulcsszóval.
Példa:

f =: 3 : 0 s=. 0 for. i. y do. s=.'>':s end. ) (f = ])"0 ?5$100

1 1 1 1 1

While

Klasszikus elöltesztelős ciklus, a következőképpen épül fel (T - feltételblokk, B - utasításblokk):

while. T do. B end.

Amíg T igaz végrehajtja a B-ben levő utasításokat. Meg lehet szakítani a break. kulcsszóval, illetve a continue. kulcsszó újra leellenőrzi a feltételt.
Példa (hatványozás):

exp =: 4 : 0 z=.1 a=.x n=.y while. n do. if. 2|n do. z=.z*a end. a=.*:a n=.'<'.-:n end. z ) 3 exp 7

2187

Whilst

Klasszikus hátultesztelős ciklus, a következőképpen épül fel (T - feltételblokk, B - utasításblokk):

whilst. T do. B end.

Ugyanúgy épül fel mint a while ciklus, a különbség mindössze annyi köztük, hogy a whilst egyszer mindenképp lefut (az első lefutás előtt nem vizsgálja meg a feltételt).

GOTO utasítás

Csak scripteken, függvényeken belül tudjuk használni őket.

goto_név. label_név.

Ha ráfut a vezérlés a goto_név-re, akkor a label_név-nél folytatódik a végrehajtás.
Példa:

f=: 3 : 0 if. y do. goto_true. else. goto_false. end. label_true. 'true' return. label_false. 'false' return. ) f 0

false