pharo hands-on: 02 syntax
TRANSCRIPT
![Page 2: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/2.jpg)
No constructors
No types declaration
No interfaces
No packages/private/protected
No parametrized types
No boxing/unboxing
And really powerful
Less is More
![Page 3: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/3.jpg)
![Page 4: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/4.jpg)
A Pure OO World
Only objects! mouse, booleans, arrays, numbers, strings, windows, scrollbars, canvas, files, trees, compilers, sound, url, socket, fonts, text, collections, stack, shortcut, streams, …
![Page 5: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/5.jpg)
3 kinds of messages
Unary messages
Binary messages
Keywords messages
5 factorial!Transcript cr
3 + 4
2 between: 0 and: 5!!Transcript show: 'hello world'
![Page 6: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/6.jpg)
postman.send(mail,recipient);
![Page 7: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/7.jpg)
postman.send(mail,recipient);
![Page 8: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/8.jpg)
postman send mail recipient
![Page 9: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/9.jpg)
postman send mail to recipient
![Page 10: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/10.jpg)
postman send: mail to: recipient
![Page 11: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/11.jpg)
() > Unary > Binary > Keywords !
1 class maxVal + 1
(1 class maxVal + 1) class
1 class maxVal raised: 3+ 2
![Page 12: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/12.jpg)
Typical Expression
ZnEasy client
url: 'http://bugs.pharo.org/issues/name/', text asString;
get;
response.
![Page 13: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/13.jpg)
Some basic objectsString: 'a string'
Symbole (unique String): #aSymbol
Character: $A
Array: #(1 2 3) { 1 . 2 . 3}
OrderedCollection: OrderedCollection new add: 35; add: 45; yourself
Set: Set new add: 1; add: 2; yourself
![Page 14: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/14.jpg)
yourself?
Set new add: 1; add: 2; yourself
is equivalent to
| s |
s := Set new.
s add: 1; add: 2.
s
![Page 15: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/15.jpg)
Block: Lambda Expressions
[ :x | x + 2 ] value: 5
-> 7
!
anonymous method
[ ]
:x is the block arguments
![Page 16: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/16.jpg)
Blocks can be stored
| b |
b := [ :x | x + 2 ].
b value: 5
-> 7
b value: 33
-> 35
![Page 17: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/17.jpg)
Conditionals: ifTrue:ifFalse:Booleans are objects
Conditional are messages sent to booleans or block
!
!
initialAnswer := fullName isEmptyOrNil
ifTrue: ['FirstnameLastname' translated]
ifFalse: [fullName].
![Page 18: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/18.jpg)
ifTrue:
forceItalicOrOblique
self slantValue = 0 ifTrue: [ slantValue := 1 ]
![Page 19: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/19.jpg)
ifFalse:ifTrue:
index = 0
ifFalse: [values at: index]
ifTrue: [self privateAt: key put: aBlock value]
![Page 20: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/20.jpg)
ifEmpty:
(myProtocol
ifEmpty: ['As yet unclassified’]
!
self listItems
ifNotEmpty: [ :aList | aList at: currentIndex ]
![Page 21: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/21.jpg)
Use [ ] when you do not know how many time it is executed.
( x isNil) ifTrue: [ .... ]
( ...) vs. [ ]
![Page 22: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/22.jpg)
Some loops
4 timesRepeat: [ self doSomething ]
0 to: 100 [ :i | ... ]
0 to: 100 by: 3 [ :i | ... ]
aCol do: [:each | ... ]
![Page 23: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/23.jpg)
Some loops: to:by:do:
| sum |
0 to: 100 by: 3 [ :i | sum= sum + i ]
![Page 24: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/24.jpg)
#(15 10 19 68) do:
[:i | Transcript show: i ; cr ]
![Page 25: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/25.jpg)
#(15 10 19 68) do:
[:i | Transcript show: i ; cr ]
![Page 26: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/26.jpg)
#(2 -3 4 -35 4) collect: [ :each| each abs]
![Page 27: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/27.jpg)
#(2 -3 4 -35 4) collect: [ :each| each abs]
> #(2 3 4 35 4)
![Page 28: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/28.jpg)
Defining a method
(2@3) <= (5@6)
!
<= aPoint
"Answer whether the receiver is neither below nor to the right of aPoint."
^ x <= aPoint x and: [y <= aPoint y]
![Page 29: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/29.jpg)
Class definition
Object subclass: #Point
instanceVariableNames: 'x y'
classVariableNames: ''
category: 'Graphics-Primitives'
![Page 30: Pharo Hands-On: 02 syntax](https://reader034.vdocument.in/reader034/viewer/2022042716/55a940da1a28ab0b5d8b45fb/html5/thumbnails/30.jpg)
Conclusion
Messages (unary, binary, keywords)
Blocks
Methods are named blocks