Smalltalk Syntax Cheat Sheet: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Cg (Diskussion | Beiträge) |
Cg (Diskussion | Beiträge) |
||
Zeile 216: | Zeile 216: | ||
{| class="wikitable" |
{| class="wikitable" |
||
|- |
|- |
||
| Numbers |
|||
⚫ | |||
⚫ | |||
| <code>Array</code> (fixed size array) |
|||
<br><code>OrderedCollection</code>, <code>List</code> (variable size) |
|||
<br><code>SortedCollection</code><br><code>Set</code>, <code>Bag</code> (unordered) |
|||
<br><code>Dictionary</code> (mapped collections) |
|||
<br><code>BinaryTree</code>, <code>AVLTree</code><br><code>SharedQueue</code> (shared, synchronized) |
|||
<br>many more... |
|||
</td> |
|||
|- |
|- |
||
⚫ | |||
⚫ | |||
| <code>Array</code> (fixed size array)<br><code>OrderedCollection</code>, <code>List</code> (variable size)<br><code>SortedCollection</code><br><code>Set</code>, <code>Bag</code> (unordered)<br><code>Dictionary</code> (mapped collections)<br><code>BinaryTree</code>, <code>AVLTree</code><br><code>SharedQueue</code> (shared, synchronized)<br>many more... |
|||
| <code>Process</code> (lightweight thread)<br><code>OSProcess</code> (heavyweight OS process) |
|||
<br><code>Semaphore</code>, <code>RecursionLock</code> (synchronization) |
|||
⚫ | |||
</td> |
|||
|- |
|- |
||
⚫ | |||
⚫ | |||
| <code>Process</code> (lightweight thread)<br><code>OSProcess</code> (heavyweight OS process)<br><code>Semaphore</code>, <code>RecursionLock</code> (synchronization)<br><code>Monitor</code>, <code>BoltLock</code><br><code>Delay</code> (time delays) |
|||
⚫ | |||
<br><code>Stream</code> (basic stream framework) |
|||
<br><code>ReadStream</code>, |
|||
<code>WriteStream</code>, |
|||
⚫ | |||
</td> |
|||
|- |
|- |
||
⚫ | |||
⚫ | |||
⚫ | |||
| <code>OperatingSystem</code> (OS API calls) |
|||
⚫ | |||
<br><code>Smalltalk</code>(startup, shutdown and globals) |
|||
|- |
|||
<br><code>ObjectMemory </code>(VM access) |
|||
⚫ | |||
</td> |
|||
| <code>OperatingSystem</code> (OS API calls)<br><code>Smalltalk</code>(startup, shutdown and globals)<br><code>ObjectMemory </code>(VM access) |
|||
|} |
|} |
Version vom 18. März 2020, 13:18 Uhr
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 -0xBEAF 0b11011 ,-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 | $a Character space Character nl Also: " 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 | Integer Float Fraction Complex
|
Collections | Array (fixed size array)OrderedCollection , List (variable size)SortedCollection Set , Bag (unordered)Dictionary (mapped collections)BinaryTree , AVLTree SharedQueue (shared, synchronized)many more... |
Process Handling | Process (lightweight thread)OSProcess (heavyweight OS process)Semaphore , RecursionLock (synchronization)Monitor , BoltLock Delay (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)
|