Smalltalk Syntax Cheat Sheet
Version vom 18. März 2020, 13:23 Uhr von Cg (Diskussion | Beiträge)
This page extracted from the "Smalltalk/X Programmers guide - Smalltalk/X Cheat Sheet"
A short, one page summary of what beginners need to know about Smalltalk/X syntax
Inhaltsverzeichnis
Syntax[Bearbeiten]
Comments[Bearbeiten]
| Regular comment | " this is a comment "
|
any text between double quotes |
| EOL-Comment | "/ this is an End-of-Line comment
|
text from quote-slash to line end |
| Token-Comment | "<<END
|
text up to line beginning with token after "<<" |
Literal Constants[Bearbeiten]
| Integers | 12345-12345
|
|
| Large integers | 1234567890123456789012345…
|
arbitrary number of digits |
| Integers with radix (Smalltalk style) |
16rAFFE, 2r010101, 8r0777, 3r012012,16r-AFFE, 2r-010101
|
prepend the radix (base) any radix from 2..36 is possible (i.e. 3r222 is a ternary number) |
| Integers with radix (C style) |
0xFEED-0xBEAF0b11011,-0b1100
|
C/Java/JavaScript style: prepend radix indicator ('x', 'b', 'o') One of hex, binary and octal |
| Floats (IEEE double; roughly 17 decimals) |
12.456 1.234e17 -6.9 -6e-10 Float pi Float e |
called "Float", but actually hold double precision |
| Short floats (IEEE single; roughly 8 decimals) |
1.234f17-6f-10
|
|
| Long floats (IEEE quad; roughly 20 decimals) |
1.234q17-6q-10
|
actual precision depends on the underlying CPU (on x86/x86_64: only 80bit) |
| High prec. floats; roughly 60 decimals |
1.234Q17-6Q-10
|
computed in software; therefore slower; this is not yet officially released. |
| Fractions | (1/3)(17/2)
|
|
| Characters | $aCharacter spaceCharacter nlAlso: " null", "tab", "return", "bell"...
|
traditionally, Smalltalk does not support any escape sequence |
| Strings | 'hello'
|
traditionally, Smalltalk does not support any escape sequence inside |
| Strings (C Style) |
c'hello\nworld'
|
supports the common escape sequences, such as "\n", "\t", "\xHH" |
| Symbols | #'hello'#foo
|
without quotes, if only alphaNumeric characters |
| Arrays |
#( el1 el2 ... elN )
|
each element is a literal constant |
| Byte Arrays | #[ b1 b2 ... bN ]
|
each byte-element an integer constant in 0..255 |
| Special Number Arrays | #XX( v1 v2 ... vN )
|
XX: is one of 'u8', 's8', 'u16', 's16', 'u32', 's32', 'u64', 's64', 'f32', 'f64' and each element being an integer or float constant |
| Immediate Inline Objects | #{ foo: fooValue . bar: barValue }
|
fooValue and barValue: are constants |
Lambda Blocks (Closures)[Bearbeiten]
| Without argument | [ expr1 . expr2 ... exprN ]
|
multiple expressions sep'd by period. When evaluated, the value is the value from the last expression, exprN |
| One argument | [ :arg |
| |
| Multiple arguments | [ :a1 :a2 ... :aN |
|
Expressions[Bearbeiten]
| Unary Expression (without argument) |
receiver messageName
|
receiver is itself either a constant, a lambda-block, a unary expression or a parenthesized expression |
| Keyword Expression (1 arg) |
receiver messageNamePart:argExpression
|
whitespace between the colon and the argExpression is optional. |
| Keyword Expression (any number of args) |
receiver
| |
| Binary Expression | receiver binOP arg
|
with binOP being any combination of special characters: * , + , - , % , & , / , \ , | , = , < , > , ? and ,
|
| Cascade Expression (multiple messages to the same receiver) |
receiver |
the receiver expression is evaluated, then multiple messages (separated by ";") are sent to this receiver. |
| Parentheses for grouping | ( any expression )
| |
| Assignment | variable := expression
|
can be used as expression. |
| Computed Array (Brace Construct) | { expr1 . expr2 . ... . exprN }
|
instantiates a new Array object with elements from the expressions. |
| Computed Inline Object | { foo: fooExpr . bar: barExpr }
|
fooExpr and barExpr: expressions |
| Inline string expressions | e'p1{e1}p2{e2}...pN{eN}pM'
|
syntactic sugar for:('p1%1p2%2...pN%NpM' bindWith:e1 with:e2 ... with:eN)where each pI is a string with possible C-escapes and each eI is a Smalltalk expression |
Remaining Syntax[Bearbeiten]
| Local variables (in block or method) | | var1 var2 ... varN |
|
variable declarations must be at the beginning, before any expression. |
| Separating multiple expressions (sequence) | expr1 . expr2 . ... exprN
|
expressions (statements) are separated by fullstop (period) characters. The last expression may or may not be followed by a fullstop; if there is one, this is treated like a followup empty statement. |
| Return from method | ^ expression
|
returns from the enclosing method (also if inside a block-closure) |
Wellknown (Common) Messages[Bearbeiten]
| Conditional Execution | boolExpr1 ifTrue:[ ... ] ifFalse:[ ... ]
|
variations without true-part, without false part and with the order reversed are available. |
| While-Loop (test at top) |
[ boolExpr1 ] whileTrue:[ ... ]
|
notice the receiver being a block. A whileFalse: variant is also available.
|
| Do-Loop (test at bottom) |
[ ... ] doWhile:[ boolExpr1 ]
|
notice the test being a block. A doUntil: variant is also available.
|
| For-Loop | start to:stop do:[:iterVar | ... ]
|
evaluates the lambda for each value in start..stop. |
| Enumerating Collections | collection do:[:elementVar | ... ]
|
evaluates the lambda for each element in the collection. |
| Evaluating a Lambda Block without arguments: with arguments: |
aBlock value
|
the number of arguments must match the number expected by the lambda (although varArg lambdas are also available) |
Wellknown Globals[Bearbeiten]
| Logging and Messaging | Transcript - the console windowStdout - standard outputStderr - standard errorStdin - standard inputLogger - redefinable logger (defaults to standard error)
|
Most Wellknown Classes[Bearbeiten]
| Numbers | IntegerFloatFractionComplex
|
| Collections | Array (fixed size array)OrderedCollection, List (variable size)SortedCollectionSet, Bag (unordered)Dictionary (mapped collections)BinaryTree, AVLTreeSharedQueue (shared, synchronized)many more... |
| Process Handling | Process (lightweight thread)OSProcess (heavyweight OS process)Semaphore, RecursionLock (synchronization)Monitor, BoltLockDelay (time delays)
|
| Files & Streams | Filename (file naming, directory access, mime type)Stream (basic stream framework)
|
| Low Level Access | OperatingSystem (OS API calls)Smalltalk(startup, shutdown and globals)ObjectMemory (VM access)
|
Examples[Bearbeiten]
exampleMethod1
|v1 v2|
v1 := 42.
v2 := v1 sqrt.
Transcript showCR: 'the root of the answer to all questions is: %1' with: v2.
exampleMethod2
|arr|
arr := #( 1 2.0 'three' (4 4 4 4) ).
arr do:[:el |
Transcript showCR: el
]
exampleMethod3
|arr|
arr := #( 1 2.0 'three' (4 4 4 4) ).
arr doWithIndex:[:el :idx |
Transcript showCR: e'array element at {idx} is {el}\n'
]