if
if( boolean, trueFunc, falseFunc)
see also: Control-Structures
if ( [false, true].choose, // Boolean expression (chooses one at random)
{ "expression was true".postln }, // true function
{ "expression was false".postln } // false function
)
(
var a = 1, z;
z = if (a < 5, { 100 },{ 200 });
z.postln;
)
UGens can also use if
the condition ugen is 0 / 1
(
{
if( LFNoise1.kr(1.0,0.5,0.5) , SinOsc.ar, Saw.ar )
}.play
)
ADVANCED:
the functions will be inlined, which plucks the code from the functions and uses a more efficient jump statement.
{
if( 6 == 9,{
"hello".postln;
},{
"hello".postln;
})
}.def.dumpByteCodes
BYTECODES: (18)
0 FE 06 PushPosInt 6
2 FE 09 PushPosInt 9
4 E6 SendSpecialBinaryArithMsg '=='
5 F8 00 06 JumpIfFalse 6 (14)
8 42 PushLiteral "hello"
9 A1 00 SendMsg 'postln'
11 FC 00 03 JumpFwd 3 (17)
14 41 PushLiteral "hello"
15 A1 00 SendMsg 'postln'
17 F2 BlockReturn
a FunctionDef in closed FunctionDef
failure to inline due to variable declarations
{
if( 6 == 9,{
var notHere;
"hello".postln;
},{
"hello".postln;
})
}.def.dumpByteCodes
WARNING: FunctionDef contains variable declarations and so will not be inlined.
in file 'selected text'
line 4 char 14 :
var notHere;•
"hello".postln;
-----------------------------------
BYTECODES: (12)
0 FE 06 PushPosInt 6
2 FE 09 PushPosInt 9
4 E6 SendSpecialBinaryArithMsg '=='
5 04 00 PushLiteralX instance of FunctionDef in closed FunctionDef
7 04 01 PushLiteralX instance of FunctionDef in closed FunctionDef
9 C3 0B SendSpecialMsg 'if'
11 F2 BlockReturn
a FunctionDef in closed FunctionDef
{
if( 6 == 9,{
"hello".postln;
},{
"hello".postln;
})
}.def.dumpByteCodes
BYTECODES: (18)
0 FE 06 PushPosInt 6
2 FE 09 PushPosInt 9
4 E6 SendSpecialBinaryArithMsg '=='
5 F8 00 06 JumpIfFalse 6 (14)
8 42 PushLiteral "hello"
9 A1 00 SendMsg 'postln'
11 FC 00 03 JumpFwd 3 (17)
14 41 PushLiteral "hello"
15 A1 00 SendMsg 'postln'
17 F2 BlockReturn
a FunctionDef in closed FunctionDef