supernova: fix for small audio vector sizes
[supercollider.git] / HelpSource / Reference / Assignment.schelp
blobad7d11f8c61d18f348e8a606a2d99c5f2b5e375f
1 title:: Assignment Statements
2 categories:: Language
3 summary:: assigning values to variables
5 section:: Single Assignment
7 A single assignment assigns the value of an expression on the right hand side to a variable on the left hand side. A single assignment is in the form:
8 code::
9 <variable> = <an expression>
11 examples:
12 code::
13 x = [1, 2, 3, 4].rotate(1);
14 c = a + b;
17 section:: Multiple Assignment
19 A multiple assignment statement assigns the elements of a link::Classes/Collection:: which is the result of an expression on the right hand side, to a list of variables on the left hand side.
20 A multiple assignment statement is preceeded by the symbol code::#::. If the last variable on the left is preceeded by three dots, then the entire remainder of the collection is assigned to that variable. There must be at least one variable name before the ellipsis.
22 The form of a multiple assignment is:
23 code::
24 # <list of variables> = <expression>
26 -- or --
27 code::
28 # <list of variables> ... <variable> = <expression>
31 examples:
32 code::
33 # a, b, c = [1, 2, 3, 4, 5, 6]; // afterwards a=1, b=2, c=3
35 # a, b ... c = [1, 2, 3, 4, 5, 6]; // afterwards a=1, b=2, c = [3, 4, 5, 6]
37 # ... a = [1, 2, 3, 4, 5, 6]; // ILLEGAL, just use:    a = [1, 2, 3, 4, 5, 6];
40 Multiple assignment is implemented using the 'at' method and the 'copyToEnd' method.
41 Your right hand side expression can return any object that responds to these messages.
43 section:: Instance Variable Assignment
45 The basic syntax for setting the value of an instance variable is to use the variable's setter method which is the name of the variable with an underscore appended.
46 code::
47 point.x_(5); // set point's x coordinate to 5
49 An alternative syntax is to use instance variable assignment.
50 code::
51 point.x = 5;
53 This type of assignment is translated to the first form by the compiler. The two syntaxes are equivalent.
55 section:: Series Assignment to an ArrayedCollection or List
57 There is a special syntax for doing assignments to a range of values in an link::Classes/ArrayedCollection:: or link::Classes/List::.
58 code::
59 a = (0,10..200);
60 a[5..10] = 1;  // series stepping by 1
62 a = (0,10..200);
63 a[7,9..13] = 1; // a series by any step size
65 a = (0,10..200);
66 a[..5] = 1;  // from zero to n
68 a = (0,10..200);
69 a[12..] = 1;  // from n to the end of the array
71 a = (0,10..200);
72 a[1,3..] = 1;  // a series to the end of the array