Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Reference / if.schelp
blob44b5cb75593520e264b8423796452c42496a5bc2
1 title:: if
2 categories::Core, Common methods
3 related:: Reference/Control-Structures
4 summary:: conditional execution
6 method:: if
8 section::example
9 code::
10 if ( [false, true].choose,                              // Boolean expression (chooses one at random)
11         { "expression was true".postln },       // true function
12         { "expression was false".postln }       // false function
16 var a = 1, z;
17 z = if (a < 5, { 100 },{ 200 });
18 z.postln;
22 UGens can also use if
24 the condition ugen is 0 / 1
26 code::
28         {
29                 if( LFNoise1.kr(1.0,0.5,0.5) , SinOsc.ar, Saw.ar )
30         }.play
34 section:: optimization
36 the functions will be inlined, which plucks the code from the functions and uses a more efficient jump statement.
38 code::
40         if( 6 == 9,{
41                 "hello".postln;
42         },{
43                 "hello".postln;
44         })
45 }.def.dumpByteCodes
47 BYTECODES: (18)
48   0   FE 06    PushPosInt 6
49   2   FE 09    PushPosInt 9
50   4   E6       SendSpecialBinaryArithMsg '=='
51   5   F8 00 06 JumpIfFalse 6  (14)
52   8   42       PushLiteral "hello"
53   9   A1 00    SendMsg 'postln'
54  11   FC 00 03 JumpFwd 3  (17)
55  14   41       PushLiteral "hello"
56  15   A1 00    SendMsg 'postln'
57  17   F2       BlockReturn
58 a FunctionDef in closed FunctionDef
64 failure to inline due to variable declarations
65 code::
68         if( 6 == 9,{
69                 var notHere;
70                 "hello".postln;
71         },{
72                 "hello".postln;
73         })
75 }.def.dumpByteCodes
77 WARNING: FunctionDef contains variable declarations and so will not be inlined.
78    in file 'selected text'
79    line 4 char 14 :
80                 var notHere;•
81                 "hello".postln;
82 -----------------------------------
83 BYTECODES: (12)
84   0   FE 06    PushPosInt 6
85   2   FE 09    PushPosInt 9
86   4   E6       SendSpecialBinaryArithMsg '=='
87   5   04 00    PushLiteralX instance of FunctionDef in closed FunctionDef
88   7   04 01    PushLiteralX instance of FunctionDef in closed FunctionDef
89   9   C3 0B    SendSpecialMsg 'if'
90  11   F2       BlockReturn
91 a FunctionDef in closed FunctionDef
94 code::
96         if( 6 == 9,{
97                 "hello".postln;
98         },{
99                 "hello".postln;
100         })
101 }.def.dumpByteCodes
103 BYTECODES: (18)
104   0   FE 06    PushPosInt 6
105   2   FE 09    PushPosInt 9
106   4   E6       SendSpecialBinaryArithMsg '=='
107   5   F8 00 06 JumpIfFalse 6  (14)
108   8   42       PushLiteral "hello"
109   9   A1 00    SendMsg 'postln'
110  11   FC 00 03 JumpFwd 3  (17)
111  14   41       PushLiteral "hello"
112  15   A1 00    SendMsg 'postln'
113  17   F2       BlockReturn
114 a FunctionDef in closed FunctionDef