Squeak - Smalltalk - Terse Guide To Squeak PDF
Squeak - Smalltalk - Terse Guide To Squeak PDF
Introduction
Allowable characters
a-z , A-Z , 0-9 , .+/\*~<>@%|&? , blank , tab , cr , ff , lf
Variables
Variables must be declared before use
Shared vars must begin with uppercase
Local vars must begin with lowercase
Reserved names: self , super , thisContext , true , false , and nil
Variable scope
Global: defined in current environment (that is usually Smalltalk ) and
accessible by all objects in system
Special (reserved): self , super , thisContext , true , false , and nil
Method Temporary: local to a method
Block Temporary: local to a block
Pool: variables in a Dictionary object
Method Parameters: automatic local vars created as a result of message call
with params
Block Parameters: automatic local vars created as a result of value: message
call
Class: shared with all instances of one class & its subclasses
Class Instance: unique to each instance of a class
Instance Variables: unique to each instance
Syntax
Comments are enclosed in quotes ( " )
Period ( . ) is the statement separator
Transcript
https://squeak.org/documentation/terse_guide/ 1/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Assignment
| x y |
x := 5. "assignment"
x := y := z := 6. "compound assignment
x := (y := 6) + 1.
"x _ 4." "older assignment st
x := Object new. "bind to allocated i
x := 123 class. "discover the object
x := Integer superclass. "discover the superc
x := Object allInstances. "get an array of all
x := Integer allSuperclasses. "get all superclasse
x := 1.2 hash. "hash value for obje
y := x copy. "copy object"
y := x shallowCopy. "copy object (not ov
y := x deepCopy. "copy object and ins
y := x veryDeepCopy. "complete tree copy
Constants
| b x |
b := true. "true constant"
b := false. "false constant"
x := nil. "nil object constant
x := 1. "integer constants"
x := 3.14. "float constants"
x := 2e-2. "fractional constant
x := 16r0F. "hex constant"
x := -1. "negative constants"
x := 'Hello'. "string constant"
x := 'I''m here'. "single quote escape
x := $A. "character constant"
x := $ . "character constant
x := #aSymbol. "symbol constants"
x := #(3 2 1). "array constants"
x := #('abc' 2 $a). "mixing of types all
https://squeak.org/documentation/terse_guide/ 2/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Booleans
| b x y |
x := 1. y := 2.
b := (x = y). "equals"
b := (x ~= y). "not equals"
b := (x == y). "identical"
b := (x ~~ y). "not identical"
b := (x > y). "greater than"
b := (x < y). "less than"
b := (x >= y). "greater than or equ
b := (x <= y). "less than or equal"
b := b not. "boolean not"
b := (x < 5) & (y > 1). "boolean and"
b := (x < 5) | (y > 1). "boolean or"
b := (x < 5) and: [y > 1]. "boolean and (short-
b := (x < 5) or: [y > 1]. "boolean or (short-c
b := (x < 5) eqv: (y > 1). "test if both true o
b := (x < 5) xor: (y > 1). "test if one true an
b := 5 between: 3 and: 12. "between (inclusive)
b := 123 isKindOf: Number. "test if object is c
b := 123 isMemberOf: SmallInteger. "test if object is t
b := 123 respondsTo: sqrt. "test if object resp
b := x isNil. "test if object is n
b := x isZero. "test if number is z
b := x positive. "test if number is p
b := x strictlyPositive. "test if number is g
b := x negative. "test if number is n
b := x even. "test if number is e
b := x odd. "test if number is o
b := x isLiteral. "test if literal con
b := x isInteger. "test if object is i
b := x isFloat. "test if object is f
b := x isNumber. "test if object is n
b := $A isUppercase. "test if upper case
b := $A isLowercase. "test if lower case
Arithmetic expressions
https://squeak.org/documentation/terse_guide/ 3/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| x |
x := 6 + 3. "addition"
x := 6 - 3. "subtraction"
x := 6 * 3. "multiplication"
x := 1 + 2 * 3. "evaluation always l
x := 5 / 3. "division with fract
x := 5.0 / 3.0. "division with float
x := 5.0 // 3.0. "integer divide"
x := 5.0 \\ 3.0. "integer remainder"
x := -5. "unary minus"
x := 5 sign. "numeric sign (1, -1
x := 5 negated. "negate receiver"
x := 1.2 integerPart. "integer part of num
x := 1.2 fractionPart. "fractional part of
x := 5 reciprocal. "reciprocal function
x := 6 * 3.1. "auto convert to flo
x := 5 squared. "square function"
x := 25 sqrt. "square root"
x := 5 raisedTo: 2. "power function"
x := 5 raisedToInteger: 2. "power function with
x := 5 exp. "exponential"
x := -5 abs. "absolute value"
x := 3.99 rounded. "round"
x := 3.99 truncated. "truncate"
x := 3.99 roundTo: 1. "round to specified
x := 3.99 truncateTo: 1. "truncate to specifi
x := 3.99 floor. "truncate"
x := 3.99 ceiling. "round up"
x := 5 factorial. "factorial"
x := -5 quo: 3. "integer divide roun
x := -5 rem: 3. "integer remainder r
x := 28 gcd: 12. "greatest common den
x := 28 lcm: 12. "least common multip
x := 100 ln. "natural logarithm"
x := 100 log. "base 10 logarithm"
x := 100 log: 10. "logarithm with spec
x := 100 floorLog: 10. "floor of the log"
x := 180 degreesToRadians. "convert degrees to
x := 3.14 radiansToDegrees. "convert radians to
x := 0.7 sin. "sine"
x := 0.7 cos. "cosine"
x := 0.7 tan. "tangent"
x := 0.7 arcSin. "arcsine"
x := 0.7 arcCos. "arccosine"
x := 0.7 arcTan. "arctangent"
x := 10 max: 20. "get maximum of two
x := 10 min: 20. "get minimum of two
x := Float pi. "pi"
x := Float e. "exp constant"
x := Float infinity. "infinity"
x := Float nan. "not-a-number"
x := Random new next; yourself. x next. "random number strea
x := 100 atRandom. "quick random number
https://squeak.org/documentation/terse_guide/ 4/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Bitwise Manipulation
| b x |
x := 16rFF bitAnd: 16r0F. "and bits"
x := 16rF0 bitOr: 16r0F. "or bits"
x := 16rFF bitXor: 16r0F. "xor bits"
x := 16rFF bitInvert. "invert bits"
x := 16r01 bitShift: 4. "left shift"
x := 16r10 bitShift: -4. "right shift"
x := 16r80 bitAt: 7. "bit at position (0|
x := 16r80 highbit. "position of highest
b := 16rFF allMask: 16r0F. "test if all bits se
b := 16rFF anyMask: 16r0F. "test if any bits se
b := 16rFF noMask: 16r0F. "test if all bits se
Conversion
| x |
x := 3.99 asInteger. "convert number to i
x := 3.99 asFraction. "convert number to f
x := 3 asFloat. "convert number to f
x := 65 asCharacter. "convert integer to
x := $A asciiValue. "convert character t
x := 3.99 printString. "convert object to s
x := 3.99 storeString. "convert object to s
x := 15 radix: 16. "convert to string i
x := 15 printStringBase: 16.
x := 15 storeStringBase: 16.
Blocks
Blocks are objects and may be assigned to a variable
Value is last expression evaluated unless explicit return
Blocks may be nested
Specification [ arguments | | localvars | expressions ]
Squeak does not currently support localvars in blocks
Max of three arguments allowed
^ expression terminates block & method (exits all nested blocks)
Blocks intended for long term storage should not contain ^
https://squeak.org/documentation/terse_guide/ 5/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| x y z |
x := [ y := 1. z := 2. ]. x value. "simple block usage"
x := [ :argOne :argTwo | argOne, ' and ' , argTwo.]. "set up block with a
Transcript show: (x value: 'First' value: 'Second'); cr. "use block with argu
"x := [ | z | z := 1.]. localvars not avail
Method calls
Unary methods are messages with no arguments
Binary methods
Keyword methods are messages with selectors including colons
Standard categories/protocols
initialize-release (methods called for new instance)
accessing (get/set methods)
testing (boolean tests - is)
comparing (boolean tests with parameter
displaying (gui related methods)
printing (methods for printing)
updating (receive notification of changes)
private (methods private to class)
instance-creation (class methods for creating instance)
| x |
x := 2 sqrt. "unary message"
x := 2 raisedTo: 10. "keyword message"
x := 194 * 9. "binary message"
Transcript show: (194 * 9) printString; cr. "combination (chaini
x := 2 perform: #sqrt. "indirect method inv
Transcript "Cascading - send mu
show: 'hello ';
show: 'world';
cr.
x := 3 + 2; * 100. "result=300. Sends m
Conditional Statements
https://squeak.org/documentation/terse_guide/ 6/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| x
|
x >
10 ifTrue: [Transcript show: 'ifTrue'; cr]. "if then"
x >
10 ifFalse: [Transcript show: 'ifFalse'; cr]. "if else"
x >
10 "if then else"
ifTrue: [Transcript show: 'ifTrue'; cr]
ifFalse: [Transcript show: 'ifFalse'; cr].
x > 10 "if else then"
ifFalse: [Transcript show: 'ifFalse'; cr]
ifTrue: [Transcript show: 'ifTrue'; cr].
Transcript show:
(x > 10
ifTrue: ['ifTrue']
ifFalse: ['ifFalse']);
cr.
Transcript "nested if then else
show:
(x > 10
ifTrue: [x > 5
ifTrue: ['A']
ifFalse: ['B']]
ifFalse: ['C']);
cr.
switch := Dictionary new. "switch functionalit
switch at: $A put: [Transcript show: 'Case A'; cr].
switch at: $B put: [Transcript show: 'Case B'; cr].
switch at: $C put: [Transcript show: 'Case C'; cr].
result := (switch at: $B) value.
Iteration statements
| x y |
x := 4. y := 1.
[x > 0] whileTrue: [x := x - 1. y := y * 2]. "while true loop"
[x >= 4] whileFalse: [x := x + 1. y := y * 2]. "while false loop"
x timesRepeat: [y := y * 2]. "times repear loop (
1 to: x do: [:a | y := y * 2]. "for loop"
1 to: x by: 2 do: [:a | y := y / 2]. "for loop with speci
#(5 4 3) do: [:a | x := x + a]. "iterate over array
Character
https://squeak.org/documentation/terse_guide/ 7/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y |
x := $A. "character assignmen
y := x isLowercase. "test if lower case"
y := x isUppercase. "test if upper case"
y := x isLetter. "test if letter"
y := x isDigit. "test if digit"
y := x isAlphaNumeric. "test if alphanumeri
y := x isSeparator. "test if separator c
y := x isVowel. "test if vowel"
y := x digitValue. "convert to numeric
y := x asLowercase. "convert to lower ca
y := x asUppercase. "convert to upper ca
y := x asciiValue. "convert to numeric
y := x asString. "convert to string"
b := $A <= $B. "comparison"
y := $A max: $B.
Symbol
| b x y |
x := #Hello. "symbol assignment"
y := #Symbol, 'Concatenation'. "symbol concatenatio
b := x isEmpty. "test if symbol is e
y := x size. "string size"
y := x at: 2. "char at location"
y := x copyFrom: 2 to: 4. "substring"
y := x indexOf: $e ifAbsent: [0]. "first position of c
x do: [:a | Transcript show: a printString; cr]. "iterate over the st
b := x allSatisfy: [:a | (a >= $a) & (a <= $z)]. "test if all element
y := x select: [:a | a > $a]. "return all elements
y := x asString. "convert symbol to s
y := x asText. "convert symbol to t
y := x asArray. "convert symbol to a
y := x asOrderedCollection. "convert symbol to o
y := x asSortedCollection. "convert symbol to s
y := x asBag. "convert symbol to b
y := x asSet. "convert symbol to s
String
https://squeak.org/documentation/terse_guide/ 8/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y |
x := 'This is a string'. "string assignment"
x := 'String', 'Concatenation'. "string concatenatio
b := x isEmpty. "test if string is e
y := x size. "string size"
y := x at: 2. "char at location"
y := x copyFrom: 2 to: 4. "substring"
y := x indexOf: $a ifAbsent: [0]. "first position of c
x := String new: 4. "allocate string obj
x "set string elements
at: 1 put: $a;
at: 2 put: $b;
at: 3 put: $c;
at: 4 put: $e.
x := String with: $a with: $b with: $c with: $d. "set up to 4 element
x do: [:a | Transcript show: a printString; cr]. "iterate over the st
b := x conform: [:a | (a >= $a) & (a <= $z)]. "test if all element
y := x select: [:a | a > $a]. "return all elements
y := x asSymbol. "convert string to s
y := x asArray. "convert string to a
x := 'ABCD' asByteArray. "convert string to b
y := x asOrderedCollection. "convert string to o
y := x asSortedCollection. "convert string to s
y := x asBag. "convert string to b
y := x asSet. "convert string to s
y := x shuffled. "randomly shuffle st
Array
Array : Fixed length collection
ByteArray : Array limited to byte elements (0-255)
WordArray : Array limited to word elements (0-2^32)
https://squeak.org/documentation/terse_guide/ 9/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := #(4 3 2 1). "constant array"
x := Array with: 5 with: 4 with: 3 with: 2. "create array with u
x := Array new: 4. "allocate an array w
x "set array elements"
at: 1 put: 5;
at: 2 put: 4;
at: 3 put: 3;
at: 4 put: 2.
b := x isEmpty. "test if array is em
y := x size. "array size"
y := x at: 4. "get array element a
b := x includes: 3. "test if element is
y := x copyFrom: 2 to: 4. "subarray"
y := x indexOf: 3 ifAbsent: [0]. "first position of e
y := x occurrencesOf: 3. "number of times obj
x do: [:a | Transcript show: a printString; cr]. "iterate over the ar
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum array elements"
sum := 0. 1 to: (x size) do: [:a | sum := sum + (x at: a)]. "sum array elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum array elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x shuffled. "randomly shuffle co
y := x asArray. "convert to array"
y := x asByteArray. "convert to byte arr
y := x asWordArray. "convert to word arr
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
OrderedCollection
Acts like an expandable array
https://squeak.org/documentation/terse_guide/ 10/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := OrderedCollection with: 4 with: 3 with: 2 with: 1. "create collection w
x := OrderedCollection new. "allocate collection
x add: 3; add: 2; add: 1; add: 4; yourself. "add element to coll
y := x addFirst: 5. "add element at begi
y := x removeFirst. "remove first elemen
y := x addLast: 6. "add element at end
y := x removeLast. "remove last element
y := x addAll: #(7 8 9). "add multiple elemen
y := x removeAll: #(7 8 9). "remove multiple ele
x at: 2 put: 3. "set element at inde
y := x remove: 5 ifAbsent: []. "remove element from
b := x isEmpty. "test if empty"
y := x size. "number of elements"
y := x at: 2. "retrieve element at
y := x first. "retrieve first elem
y := x last. "retrieve last eleme
b := x includes: 5. "test if element is
y := x copyFrom: 2 to: 3. "subcollection"
y := x indexOf: 3 ifAbsent: [0]. "first position of e
y := x occurrencesOf: 3. "number of times obj
x do: [:a | Transcript show: a printString; cr]. "iterate over the co
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := 0. 1 to: (x size) do: [:a | sum := sum + (x at: a)]. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x shuffled. "randomly shuffle co
y := x asArray. "convert to array"
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
SortedCollection
Like OrderedCollection except order of elements determined by sorting criteria
https://squeak.org/documentation/terse_guide/ 11/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := SortedCollection with: 4 with: 3 with: 2 with: 1. "create collection w
x := SortedCollection new. "allocate collection
x := SortedCollection sortBlock: [:a :c | a > c]. "set sort criteria"
x add: 3; add: 2; add: 1; add: 4; yourself. "add element to coll
y := x addFirst: 5. "add element at begi
y := x removeFirst. "remove first elemen
y := x addLast: 6. "add element at end
y := x removeLast. "remove last element
y := x addAll: #(7 8 9). "add multiple elemen
y := x removeAll: #(7 8 9). "remove multiple ele
y := x remove: 5 ifAbsent: []. "remove element from
b := x isEmpty. "test if empty"
y := x size. "number of elements"
y := x at: 2. "retrieve element at
y := x first. "retrieve first elem
y := x last. "retrieve last eleme
b := x includes: 4. "test if element is
y := x copyFrom: 2 to: 3. "subcollection"
y := x indexOf: 3 ifAbsent: [0]. "first position of e
y := x occurrencesOf: 3. "number of times obj
x do: [:a | Transcript show: a printString; cr]. "iterate over the co
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := 0. 1 to: (x size) do: [:a | sum := sum + (x at: a)]. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x asArray. "convert to array"
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
Bag
Like OrderedCollection except elements are in no particular order
https://squeak.org/documentation/terse_guide/ 12/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := Bag with: 4 with: 3 with: 2 with: 1. "create collection w
x := Bag new. "allocate collection
x add: 4; add: 3; add: 1; add: 2; yourself. "add element to coll
x add: 3 withOccurrences: 2. "add multiple copies
y := x addAll: #(7 8 9). "add multiple elemen
y := x removeAll: #(7 8 9). "remove multiple ele
y := x remove: 4 ifAbsent: []. "remove element from
b := x isEmpty. "test if empty"
y := x size. "number of elements"
b := x includes: 3. "test if element is
y := x occurrencesOf: 3. "number of times obj
x do: [:a | Transcript show: a printString; cr]. "iterate over the co
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
Sets
Set : like Bag except duplicates not allowed
IdentitySet : uses identity test ( == rather than = )
https://squeak.org/documentation/terse_guide/ 13/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := Set with: 4 with: 3 with: 2 with: 1. "create collection w
x := Set new. "allocate collection
x add: 4; add: 3; add: 1; add: 2; yourself. "add element to coll
y := x addAll: #(7 8 9). "add multiple elemen
y := x removeAll: #(7 8 9). "remove multiple ele
y := x remove: 4 ifAbsent: []. "remove element from
b := x isEmpty. "test if empty"
y := x size. "number of elements"
x includes: 4. "test if element is
x do: [:a | Transcript show: a printString; cr]. "iterate over the co
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x asArray. "convert to array"
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
Interval
https://squeak.org/documentation/terse_guide/ 14/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := Interval from: 5 to: 10. "create interval obj
x := 5 to: 10.
x := Interval from: 5 to: 10 by: 2. "create interval obj
x := 5 to: 10 by: 2.
b := x isEmpty. "test if empty"
y := x size. "number of elements"
x includes: 9. "test if element is
x do: [:k | Transcript show: k printString; cr]. "iterate over interv
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 7]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := 0. 1 to: (x size) do: [:a | sum := sum + (x at: a)]. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x asArray. "convert to array"
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
Associations
| x y |
x := #myVar->'hello'.
y := x key.
y := x value.
Dictionaries
Dictionary
IdentityDictionary : uses identity test ( == rather than = )
https://squeak.org/documentation/terse_guide/ 15/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x y sum max |
x := Dictionary new. "allocate collection
x add: #a->4; add: #b->3; add: #c->1; add: #d->2; yourself. "add element to coll
x at: #e put: 3. "set element at inde
b := x isEmpty. "test if empty"
y := x size. "number of elements"
y := x at: #a ifAbsent: []. "retrieve element at
y := x keyAtValue: 3 ifAbsent: []. "retrieve key for gi
y := x removeKey: #e ifAbsent: []. "remove element from
b := x includes: 3. "test if element is
b := x includesKey: #a. "test if element is
y := x occurrencesOf: 3. "number of times obj
y := x keys. "set of keys"
y := x values. "bag of values"
x do: [:a | Transcript show: a printString; cr]. "iterate over the va
x keysDo: [:a | Transcript show: a printString; cr]. "iterate over the ke
x associationsDo: [:a | Transcript show: a printString; cr]."iterate over the as
x keysAndValuesDo: [:aKey :aValue | Transcript "iterate over keys a
show: aKey printString; space;
show: aValue printString; cr].
b := x conform: [:a | (a >= 1) & (a <= 4)]. "test if all element
y := x select: [:a | a > 2]. "return collection o
y := x reject: [:a | a < 2]. "return collection o
y := x collect: [:a | a + a]. "transform each elem
y := x detect: [:a | a > 3] ifNone: []. "find position of fi
sum := 0. x do: [:a | sum := sum + a]. sum. "sum elements"
sum := x inject: 0 into: [:a :c | a + c]. "sum elements"
max := x inject: 0 into: [:a :c | (a > c) "find max element in
ifTrue: [a]
ifFalse: [c]].
y := x asArray. "convert to array"
y := x asOrderedCollection. "convert to ordered
y := x asSortedCollection. "convert to sorted c
y := x asBag. "convert to bag coll
y := x asSet. "convert to set coll
Internal Stream
| b x ios |
ios := ReadStream on: 'Hello read stream'.
ios := ReadStream on: 'Hello read stream' from: 1 to: 5.
[(x := ios nextLine) notNil]
whileTrue: [Transcript show: x; cr].
ios position: 3.
ios position.
x := ios next.
x := ios peek.
x := ios contents.
b := ios atEnd.
FileStream
| b x ios |
ios := FileStream newFileNamed: 'ios.txt'.
ios nextPut: $H; cr.
ios nextPutAll: 'Hello File'; cr.
'Hello File' printOn: ios.
'Hello File' storeOn: ios.
ios close.
https://squeak.org/documentation/terse_guide/ 17/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Date
| b x y |
x := Date today. "create date for tod
x := Date dateAndTimeNow. "create date from cu
x := Date readFromString: '01/02/1999'. "create date from fo
x := Date newDay: 12 month: #July year: 1999 "create date from pa
x := Date fromDays: 36000. "create date from el
y := Date dayOfWeek: #Monday. "day of week as int
y := Date indexOfMonth: #January. "month of year as in
y := Date daysInMonth: 2 forYear: 1996. "day of month as int
y := Date daysInYear: 1996. "days in year (365|3
y := Date nameOfDay: 1 "weekday name (#Mond
y := Date nameOfMonth: 1. "month name (#Januar
y := Date leapYear: 1996. "1 if leap year; 0 i
y := x weekday. "day of week (#Monda
y := x previous: #Monday. "date for previous d
y := x dayOfMonth. "day of month (1-31)
y := x day. "day of year (1-366)
y := x firstDayOfMonth. "day of year for fir
y := x monthName. "month of year (#Jan
y := x monthIndex. "month of year (1-12
y := x daysInMonth. "days in month (1-31
y := x year. "year (19xx)"
y := x daysInYear. "days in year (365|3
y := x daysLeftInYear. "days left in year (
y := x asSeconds. "seconds elapsed sin
y := x addDays: 10. "add days to date ob
y := x subtractDays: 10. "subtract days to da
y := x subtractDate: (Date today). "subtract date (resu
y := x printFormat: #(2 1 3 $/ 1 1). "print formatted dat
b := (x <= Date today). "comparison"
Time
| b x y |
x := Time now. "create time from cu
x := Time dateAndTimeNow. "create time from cu
x := Time readFromString: '3:47:26 pm'. "create time from fo
x := Time fromSeconds: (60 * 60 * 4). "create time from el
y := Time millisecondClockValue. "milliseconds since
y := Time totalSeconds. "total seconds since
y := x seconds. "seconds past minute
y := x minutes. "minutes past hour (
y := x hours. "hours past midnight
y := x addTime: (Time now). "add time to time ob
y := x subtractTime: (Time now). "subtract time to ti
y := x asSeconds. "convert time to sec
x := Time millisecondsToRun: [ "timing facility"
1 to: 1000 do: [:index | y := 3.14 * index]].
b := (x <= Time now). "comparison"
https://squeak.org/documentation/terse_guide/ 18/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Point
| x y |
x := 200@100. "obtain a new point"
y := x x. "x coordinate"
y := x y. "y coordinate"
x := 200@100 negated. "negates x and y"
x := (-200@-100) abs. "absolute value of x
x := ([email protected]) rounded. "round x and y"
x := ([email protected]) truncated. "truncate x and y"
x := 200@100 + 100. "add scale to both x
x := 200@100 - 100. "subtract scale from
x := 200@100 * 2. "multiply x and y by
x := 200@100 / 2. "divide x and y by s
x := 200@100 // 2. "divide x and y by s
x := 200@100 \\ 3. "remainder of x and
x := 200@100 + 50@25. "add points"
x := 200@100 - 50@25. "subtract points"
x := 200@100 * 3@4. "multiply points"
x := 200@100 // 3@4. "divide points"
x := 200@100 max: 50@200. "max x and y"
x := 200@100 min: 50@200. "min x and y"
x := 20@5 dotProduct: 10@2. "sum of product (x1*
Rectangle
Rectangle fromUser
Pen
https://squeak.org/documentation/terse_guide/ 19/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| myPen |
Display restoreAfter: [
Display fillWhite.
].
https://squeak.org/documentation/terse_guide/ 20/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
"binary message"
receiver := 1.
message := '+' asSymbol.
argument := 2.
result := receiver perform: message withArguments: (Array with: argument).
result := Compiler evaluate: ((receiver storeString), ' ', message, ' ', (argume
result := (Message new setSelector: message arguments: (Array with: argument)) s
"keyword messages"
receiver := 12.
keyword1 := 'between:' asSymbol.
keyword2 := 'and:' asSymbol.
argument1 := 10.
argument2 := 20.
result := receiver
perform: (keyword1, keyword2) asSymbol
withArguments: (Array with: argument1 with: argument2).
result := Compiler evaluate:
((receiver storeString), ' ', keyword1, (argument1 storeString) , ' ', keywor
result := (Message new
setSelector: (keyword1, keyword2) asSymbol
arguments: (Array with: argument1 with: argument2))
sentTo: receiver.
class/meta-class
https://squeak.org/documentation/terse_guide/ 21/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
| b x |
x := String name. "class name"
x := String category. "organization catego
x := String comment. "class comment"
x := String kindOfSubclass. "subclass type - sub
x := String definition. "class definition"
x := String instVarNames. "immediate instance
x := String allInstVarNames. "accumulated instanc
x := String classVarNames. "immediate class var
x := String allClassVarNames. "accumulated class v
x := String sharedPools. "immediate dictionar
x := String allSharedPools. "accumulated diction
x := String selectors. "message selectors f
x := String sourceCodeAt: #size. "source code for spe
x := String allInstances. "collection of all i
x := String superclass. "immediate superclas
x := String allSuperclasses. "accumulated supercl
x := String withAllSuperclasses. "receiver class and
x := String subclasses. "immediate subclasse
x := String allSubclasses. "accumulated subclas
x := String withAllSubclasses. "receiver class and
b := String instSize. "number of named ins
b := String isFixed. "true if no indexed
b := String isVariable. "true if has indexed
b := String isPointers. "true if index insta
b := String isBits. "true if index insta
b := String isBytes. "true if index insta
b := String isWords. "true if index insta
Object withAllSubclasses size. "get total number of
Debugging
| a b x |
x yourself. "returns receiver"
String browse. "browse specified cl
x inspect. "open object inspect
x confirm: 'Is this correct?'.
x halt. "breakpoint to open
x halt: 'Halt message'.
x notify: 'Notify text'.
x error: 'Error string'. "open up error window
x doesNotUnderstand: #cmrMessage. "flag message is not
x shouldNotImplement. "flag message should
x subclassResponsibility. "flag message as abs
x errorImproperStore. "flag an improper st
x errorNonIntegerIndex. "flag only integers
x errorSubscriptBounds. "flag subscript out
x primitiveFailed. "system primitive fa
https://squeak.org/documentation/terse_guide/ 22/23
5/4/2020 Squeak/Smalltalk | Terse Guide to Squeak
Misc
| x |
"Smalltalk condenseChanges." "compress the change
x := FillInTheBlank request: 'Prompt Me'. "prompt user for inp
x := UIManager default request: 'Prompt Me'. "prompt user for inp
Utilities openCommandKeyHelp.
https://squeak.org/documentation/terse_guide/ 23/23