class library: quit internal server on class library compilation
[supercollider.git] / HelpSource / Reference / if.schelp
blob21163188c86a07704193f9167bd7f968b45db02e
1 title:: if
2 categories::Core, Common methods
3 related:: Guides/Control-Structures
4 summary:: conditional execution
6 method:: if
7 subsection::example
8 code::
9 if ( [false, true].choose,                              // Boolean expression (chooses one at random)
10         { "expression was true".postln },       // true function
11         { "expression was false".postln }       // false function
15 var a = 1, z;
16 z = if (a < 5, { 100 },{ 200 });
17 z.postln;
21 UGens can also use if
23 the condition ugen is 0 / 1
25 code::
27         {
28                 if( LFNoise1.kr(1.0,0.5,0.5) , SinOsc.ar, Saw.ar )
29         }.play
33 subsection:: optimization
35 the functions will be inlined, which plucks the code from the functions and uses a more efficient jump statement.
37 code::
39         if( 6 == 9,{
40                 "hello".postln;
41         },{
42                 "hello".postln;
43         })
44 }.def.dumpByteCodes
46 BYTECODES: (18)
47   0   FE 06    PushPosInt 6
48   2   FE 09    PushPosInt 9
49   4   E6       SendSpecialBinaryArithMsg '=='
50   5   F8 00 06 JumpIfFalse 6  (14)
51   8   42       PushLiteral "hello"
52   9   A1 00    SendMsg 'postln'
53  11   FC 00 03 JumpFwd 3  (17)
54  14   41       PushLiteral "hello"
55  15   A1 00    SendMsg 'postln'
56  17   F2       BlockReturn
57 a FunctionDef in closed FunctionDef
63 failure to inline due to variable declarations
64 code::
67         if( 6 == 9,{
68                 var notHere;
69                 "hello".postln;
70         },{
71                 "hello".postln;
72         })
74 }.def.dumpByteCodes
76 WARNING: FunctionDef contains variable declarations and so will not be inlined.
77    in file 'selected text'
78    line 4 char 14 :
79                 var notHere;•
80                 "hello".postln;
81 -----------------------------------
82 BYTECODES: (12)
83   0   FE 06    PushPosInt 6
84   2   FE 09    PushPosInt 9
85   4   E6       SendSpecialBinaryArithMsg '=='
86   5   04 00    PushLiteralX instance of FunctionDef in closed FunctionDef
87   7   04 01    PushLiteralX instance of FunctionDef in closed FunctionDef
88   9   C3 0B    SendSpecialMsg 'if'
89  11   F2       BlockReturn
90 a FunctionDef in closed FunctionDef
93 code::
95         if( 6 == 9,{
96                 "hello".postln;
97         },{
98                 "hello".postln;
99         })
100 }.def.dumpByteCodes
102 BYTECODES: (18)
103   0   FE 06    PushPosInt 6
104   2   FE 09    PushPosInt 9
105   4   E6       SendSpecialBinaryArithMsg '=='
106   5   F8 00 06 JumpIfFalse 6  (14)
107   8   42       PushLiteral "hello"
108   9   A1 00    SendMsg 'postln'
109  11   FC 00 03 JumpFwd 3  (17)
110  14   41       PushLiteral "hello"
111  15   A1 00    SendMsg 'postln'
112  17   F2       BlockReturn
113 a FunctionDef in closed FunctionDef