Smalltalk Syntax Cheat Sheet/en: Unterschied zwischen den Versionen
Cg (Diskussion | Beiträge) |
Cg (Diskussion | Beiträge) |
||
| Zeile 417: | Zeile 417: | ||
</table> |
</table> |
||
== Examples == |
|||
=== File Handling ==== |
|||
==== Open a file, write some lines, close it ==== |
|||
|fn stream nr nr1 nr2 nr3|. "/ local variables |
|||
nr := 123. |
|||
nr1 := 10. |
|||
nr2 := 20. |
|||
nr3 := 30. |
|||
fn := 'myFile' asFilename. "/ convert string to filename |
|||
stream := fn writeStream. "/ open a stream for writing |
|||
stream nextPutLine:'bla bla'. "/ write with line-end-character |
|||
stream nextPut:'word1'. "/ without line-end-character |
|||
stream cr. "/ line-end-character |
|||
stream printf: c'%3d\n' with:nr. "/ formatted print |
|||
stream printf: c'%3d %3x %03x\n' withAll:{nr1 . nr2 . nr3}. |
|||
stream close |
|||
==== Open the file, read some lines, close it ==== |
|||
|fn stream line word nrs|. "/ local variables |
|||
stream := 'myFile' asFilename readStream. "/ open for reading |
|||
line := stream nextLine. "/ read a line |
|||
word := stream next:5. "/ read 5 characters |
|||
stream skipThroughEndOfLine. "/ skip up-to and including line-end |
|||
nrs := stream scanf: c'%3d\n'. "/ formatted read; returns vector (with 1 nr in it) |
|||
nr1 := nrs at:1. |
|||
nrs := stream scanf: c'%3d %3x %03x'. "/ returns a vector (with 3 nrs in it) |
|||
stream close |
|||
Version vom 4. Juli 2023, 10:19 Uhr
A short, one page summary of what beginners need to know about Smalltalk/X (ST/X) syntax.
Non standard ST/X extensions are marked with (*).
A list of most useful messages is found "List of Useful Selectors".
Inhaltsverzeichnis
Syntax[Bearbeiten]
Comments[Bearbeiten]
| Regular comment | " this is a comment " |
| EOL-Comment (*) | "/ this is an End-of-Line comment |
| Token-Comment (*) | "<<END |
Literal Constants[Bearbeiten]
| Integers | 12345 |
| Large integers | 1234567890123456789012345...(arbitrary size) |
| Integers with radix | hex:16rAFFE 0xFEED
|
| Floats (IEEE double; roughly 17 decimals) |
12.456
|
| Short floats (IEEE single; roughly 8 decimals) |
1.234f17
|
| Long floats (IEEE quad; roughly 20 decimals) (*) |
1.234q17
|
| Fractions |
(1/3)
|
| ScaledDecimal |
123.456s2
|
| Characters |
$a
|
| Strings |
'hello'with C-escape sequences (*): with embedded expressions (*): internationalization (*): regex (*): |
| Symbols |
#'hello'#foo(without quotes, if only alphaNumeric characters) |
| Arrays |
#( el1 el2 ... elN )
|
| Byte arrays |
#[ b1 b2 ... bN ]
|
| Special number arrays (*) |
#XX( v1 v2 ... vN )
|
| Immediate Inline Objects (*) |
#{ foo: fooValue . bar: barValue }
|
Blocks (aka Lambdas / Closures)[Bearbeiten]
| Without argument | [ expr1 . expr2 ... 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 (sending multiple messages to the same receiver) |
receiverthe receiver expression is evaluated, then multiple messages (separated by ";") are sent to this receiver.
|
| Parentheses for grouping | ( any expression )
|
| Assignment | variable := expressioncan be used as expression. |
| Computed Array (Brace Construct) | { expr1 . expr2 . ... . exprN }
instantiates a new Array object with elements from the expressions. |
| Computed Inline Objects (*) |
{ foo: fooExpr . bar: barExpr }
|
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.
|
| 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 (ifFalse:), without false part (ifTrue:) and with the order reversed (ifFalse:ifTrue:) are available. |
| While-Loop | [ boolExpr1 ] whileTrue:[ ... ]
notice the receiver being a block. |
| 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) |
| Starting a background thread | aBlock fork
evaluates the lambda in a separate thread. Alternatives are "forkNamed:" to give the thread a user friendly name. |
Wellknown Globals[Bearbeiten]
| Logging and Messaging | Logger - redefinable logger (defaults to standard error)
|
Most Wellknown Classes[Bearbeiten]
Numbers[Bearbeiten]
</table≈>Collections[Bearbeiten]
| Numbers | Number (abstract superclass)
|
Process Handling[Bearbeiten]
| Collections | <A HREF="http://live.exept.de/ClassDoc/classDocOf:,Array">Array</A> (fixed size array)
|
Files & Streams[Bearbeiten]
| Process Handling | Process (lightweight thread)OSProcess (heavyweight OS process)
|
Low Level Access[Bearbeiten]
| Files & Streams | Filename (file naming, directory access, mime type)
|
| Low Level Access | OperatingSystem (OS API calls)
|
Examples[Bearbeiten]
File Handling =[Bearbeiten]
Open a file, write some lines, close it[Bearbeiten]
|fn stream nr nr1 nr2 nr3|. "/ local variables
nr := 123.
nr1 := 10.
nr2 := 20.
nr3 := 30.
fn := 'myFile' asFilename. "/ convert string to filename
stream := fn writeStream. "/ open a stream for writing
stream nextPutLine:'bla bla'. "/ write with line-end-character
stream nextPut:'word1'. "/ without line-end-character
stream cr. "/ line-end-character
stream printf: c'%3d\n' with:nr. "/ formatted print
stream printf: c'%3d %3x %03x\n' withAll:{nr1 . nr2 . nr3}.
stream close
Open the file, read some lines, close it[Bearbeiten]
|fn stream line word nrs|. "/ local variables stream := 'myFile' asFilename readStream. "/ open for reading line := stream nextLine. "/ read a line word := stream next:5. "/ read 5 characters stream skipThroughEndOfLine. "/ skip up-to and including line-end nrs := stream scanf: c'%3d\n'. "/ formatted read; returns vector (with 1 nr in it) nr1 := nrs at:1. nrs := stream scanf: c'%3d %3x %03x'. "/ returns a vector (with 3 nrs in it) stream close