if¶
Evaluate expression/s under some condition
if[test;e1;e2;e3;…;en]
Control construct. Where
testis an expression that evaluates to an atom of integral typee1,e2, …enare expressions
unless test evaluates to zero, the expressions e1 to en are evaluated, in order.
The result of if is always the generic null.
q)a:100
q)r:""
q)if[a>10;a:20;r:"true"]
q)a
20
q)r
"true"
if is not a function but a control construct. It cannot be iterated or projected.
if is often preferred to Cond when a test guards a side effect, such as amending a global.
A common use is to catch special or invalid arguments to a function.
foo:{[x;y]
if[type[x]<0; :x]; / no-op for atom x
if[count[y]<>3; '"length"]; / invalid y
..
}
Name scope¶
The brackets of the expression list do not create lexical scope. Name scope within the brackets is the same as outside them.
Setting local variables using if can have unintended consequences.
Cond,
do,
while,
Vector Conditional
Controlling evaluation
Q for Mortals
§10.1.4 if