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