[up] [next]

Smalltalk/X Cheat Sheet

A short, one page summary of what beginners need to know about syntax and ST/X command line arguments on one page. Non standard ST/X extensions are marked with (*).

Syntax

Comments

Regular comment " this is a comment "
EOL-Comment (*) "/ this is an End-of-Line comment
Token-Comment (*) ">>END
a multiline token-comment up to
a line starting with 'END'
more commented stuff here
...
comment ends here
END

Literal Constants

Integers 12345
-12345
Large integers 1234567890123456789012345...
(arbitrary size)
Integers with radix 16rAFFE
16r-AFFE
-16rAFFE
2r010101
8r0777
Floats
(IEEE double; roughly 17 decimals)
12.456
1.234e17
-6.9
-6e-10
Float pi
Float e
Short floats
(IEEE single; roughly 8 decimals)
1.234f17
-6f-10
Long floats
(IEEE quad; roughly 20 decimals)
1.234q17
-6q-10
High prec. floats; roughly 60 decimals
1.234Q17
-6Q-10
Fractions
(1/3)
(17/2)
Characters
$a
Character space
Character nl

Also: "null", "tab", "return", "bell"...
Strings
'hello'

with C-escape sequences (*):

c'hello\nworld'

Symbols
#'hello'
#foo
(without quotes, if only alphaNumeric characters)
Arrays
#( el1 el2 ... elN )
each element 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

Lambda Blocks (Closures)

Without argument [ expr1 . expr2 ... exprN ]
when evaluated, the value is the value
 from the last expression, exprN
One argument [:arg |
expr1 . expr2 ... exprN
]
Multiple arguments [:a1 :a2 ... :aN |
expr1 . expr2 ... exprN
]

Expressions

the receiver expression is evaluated, then multiple messages (separated by ";") are sent to this receiver.

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
    messageNamePart1:argExpression1
    messageNamePart2:argExpression2
    ...
    messageNamePartN:argExpressionN
Binary Expression receiver binOP arg

with binOP being any combination of special characters: * , + , - , % , & , / , \ , | , = , < , > , ? and ,
I.e. "foo ==> 123" is the binary message "==>" sent to foo with 123 as argument.
And "foo ? 123" is the binary message "?" sent to foo with 123 as argument.

Cascade Expression
(sending multiple messages to the same receiver)
receiver
message1 ;
message2 ;
...
messageN
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.

Remaining Syntax

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

Conditional Execution boolExpr1 ifTrue:[ ... ] ifFalse:[ ... ]

variations without true-part, without false part and with the order reversed are available.

While-Loop [ boolExpr1 ] whileTrue:[ ... ]

notice the receiver being a block.
A whileFalse 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

aBlock value:expr1 ... value:exprN

the number of arguments must match the number expected by the lambda (although varArg lambdas are also available)

Wellknown Globals

Logging and Messaging Transcript - console window
Stdout - standard output
Stderr - standard error
Stdin - standard input
Logger - redefinable logger (defaults to standard error)

Most Wellknown Classes

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
Files & Streams Filename (file naming, directory access, mime type)
Stream (basic stream framework)
ReadStream, WriteStream, EncodedStream
ExternalStream, FileStream, Socket (OS streams)
Low Level Access OperatingSystem (OS API calls)
Smalltalk(startup, shutdown and globals)
ObjectMemory (VM access)

Comand Line

-I ignore snapshot image
--repl start an interactive read-eval-print-loop
--print expr eval expr, print its value then exit
--eval expr eval expr (without printing) then exit
--execute filename execute the script in fileName then exit
--loadPackage package-ID preload a compiled smalltalk class library (package)
--help show all other command line options


Copyright © 2017 Claus Gittinger Development & Consulting

<cg@exept.de>

Doc $Revision: 1.5 $ $Date: 2019/02/09 12:51:24 $