I've been playing with Supercollider without reading the manual. I am just reading the manual now and am recording some revelations for personal use here.
Read from the middle (inner most function) out - nesting unpacks poetically
Evaluate Maths left to right: 10 + 5 * 4 = 60 !! (not 30)
Equivalence of Functional vs receiver notation:
functional: ("echo", 20) and rand(100)
receiver: ("echo".dup) 100.rand
So message ( arg ) == arg.message
and message ( arg1, arg2 ) == arg1.message( arg2 )
Style dictates when to use which.
UGens generally written as receiver.message (SinOsc.ar())
Receiver notation can string together messages, which can be more readable than high levels of nesting
{1000.0.rand.round(0.01).postln}.dup(100).postln.sort.plot
" Quotation marks " enclose a string of chars to create a string
' single quotes ' create symbols, as does a \backslash
'aSymbol' == \aSymbol (see String and Symbol help for more)
( parentheses ) enclose argument lists and force precedence
[ brackets ] define a collection of items - including Arrays which can mix data types and receive messages
{ braces } define functions
dup(random(1000.0), 3) // picks a number, duplicates it
dup({rand(1000.0)}, 3) // duplicates the rand function
== [ rand(1000.0), rand(1000.0), rand(1000.0) ]