2013 lecture-02-syntax shortnewcut
DESCRIPTION
An introduction of the Pharo syntax. Pharo is a new dynamically typed language. It is inspired from Smalltalk and it is elegant, simple and powerful. http://www.pharo.orgTRANSCRIPT
![Page 1: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/1.jpg)
Pharo: Syntax in a NutshellS. Ducasse and M. Denker http://www.pharo.org
![Page 2: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/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 better
![Page 3: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/3.jpg)
![Page 4: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/4.jpg)
Everything is an object
(10@200) class
Point selectors
![Page 5: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/5.jpg)
Class definition
Object subclass: #Point
instanceVariableNames: 'x y'
classVariableNames: ''
category: 'Graphics-Primitives'
![Page 6: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/6.jpg)
Complete Syntax on a PostCardexampleWithNumber: x
“A method that has unary, binary, and key word messages, declares arguments and temporaries (but not block temporaries), accesses a global variable (but not and instance variable), uses literals (array, character, symbol, string, integer, float), uses the pseudo variable true false, nil, self, and super, and has sequence, assignment, return and cascade. It has both zero argument and one argument blocks.”
|y|
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
{ 1 . 2 . #($a #a ‘a’ 1 1.0) }
do: [:each | Transcript show: (each class name); show: (each printString); show: ‘ ‘].
^ x < y
![Page 7: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/7.jpg)
Language Constructs^ return
“ comments
# symbol or array
‘ string
[ ] block or byte array
. separator and not terminator (or namespace access in VW)
; cascade (sending several messages to the same instance)
| local or block variable
:= assignment
$ character
![Page 8: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/8.jpg)
Syntaxcomment: “a comment”
character: $c $h $a $r $a $c $t $e $r $s $# $@
string: ‘a nice string’ ‘lulu’ ‘l’’idiot’
symbol: #mac #+
array: #(1 2 3 (1 3) $a 4)
byte array: #[1 2 3]
integer: 1, 2r101
real: 1.5, 6.03e-34,4, 2.4e7
float: 1/33
boolean: true, false
point: 10@120
![Page 9: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/9.jpg)
![Page 10: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/10.jpg)
Messages to Objects
![Page 11: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/11.jpg)
3 kinds of messagesUnary messages
Binary messages
Keywords messages
5 factorialTranscript cr
3 + 4
2 between: 0 and: 5
Transcript show: 'hello world'
![Page 12: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/12.jpg)
() > Unary > Binary > Keywords
1 class maxVal raised: 3+ 2
![Page 13: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/13.jpg)
postman.send(mail,recipient);
![Page 14: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/14.jpg)
postman.send(mail,recipient);
![Page 15: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/15.jpg)
postman send mail recipient
![Page 16: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/16.jpg)
postman send mail to recipient
![Page 17: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/17.jpg)
postman send: mail to: recipient
![Page 18: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/18.jpg)
<= aPoint ! "Answer whether the receiver is neither! below nor to the right of aPoint."
! ^ x <= aPoint x and: [y <= aPoint y]
A typical method in PointMethod name Argument Comment
Return Binary messageKeyword messageInstance variable Block
(2@3) <= (5@6) true
![Page 19: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/19.jpg)
| p pen |p := [email protected] := Pen new.pen up.pen goto: p; down; goto: p+p
Statements and cascades
Temporary variables Statement
Cascade
![Page 20: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/20.jpg)
•Anonymous method•Passed as method argument or stored
• Functions fct(x)= x*x+3, fct(2).
fct := [:x| x * x + 3]. fct value: 2
Blocks
![Page 21: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/21.jpg)
Integer>>factorial | tmp |
tmp := 1. 2 to: self do: [:i| tmp := tmp * i]
#(1 2 3) do: [:each | each crLog]
Block usage
![Page 22: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/22.jpg)
Control structuresEvery control structure is realized by message sends
4 timesRepeat: [Beeper beep]
max: aNumber! ^ self < aNumber ! ! ifTrue: [aNumber] ! ! ifFalse: [self]
![Page 23: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/23.jpg)
Iterators are your best friends
compact
nice abstraction
Just messages sent to collections
![Page 24: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/24.jpg)
#(2 -3 4 -35 4) collect: [ :each| each abs]
![Page 25: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/25.jpg)
#(2 -3 4 -35 4) collect: [ :each| each abs]
> #(2 3 4 35 4)
![Page 26: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/26.jpg)
#(15 10 19 68) collect: [:i | i odd ]
![Page 27: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/27.jpg)
#(15 10 19 68) collect: [:i | i odd ]
> #(true false true false)
![Page 28: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/28.jpg)
#(15 10 19 68) do:
[:i | Transcript show: i ; cr ]
![Page 29: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/29.jpg)
#(15 10 19 68) do:
[:i | Transcript show: i ; cr ]
![Page 30: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/30.jpg)
#(1 2 3)
with: #(10 20 30)
do: [:x :y| Transcript show: (y ** x) ; cr ]
![Page 31: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/31.jpg)
#(1 2 3)
with: #(10 20 30)
do: [:x :y| Transcript show: (y ** x) ; cr ]
![Page 32: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/32.jpg)
#(15 10 19 68) select: [:i|i odd]
#(15 10 19 68) reject: [:i|i odd]
#(12 10 19 68 21) detect: [:i|i odd]
#(12 10 12 68) detect: [:i|i odd] ifNone:[1]
![Page 33: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/33.jpg)
Fun with Numbers!
![Page 34: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/34.jpg)
1 class
![Page 35: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/35.jpg)
1 class
>SmallInteger
![Page 36: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/36.jpg)
1 class maxVal
![Page 37: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/37.jpg)
1 class maxVal
>1073741823
![Page 38: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/38.jpg)
1 class maxVal + 1
![Page 39: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/39.jpg)
1 class maxVal + 1
>1073741824
![Page 40: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/40.jpg)
(1 class maxVal + 1) class
![Page 41: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/41.jpg)
(1 class maxVal + 1) class
>LargePositiveInteger
![Page 42: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/42.jpg)
(1/3) + (2/3)
![Page 43: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/43.jpg)
(1/3) + (2/3)
>1
![Page 44: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/44.jpg)
2/3 + 1
![Page 45: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/45.jpg)
2/3 + 1
> 5/3
![Page 46: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/46.jpg)
1000 factorial
![Page 47: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/47.jpg)
1000 factorial
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000
![Page 48: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/48.jpg)
1000 factorial / 999 factorial
![Page 49: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/49.jpg)
1000 factorial / 999 factorial
> 1000
![Page 50: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/50.jpg)
Simple and elegant
![Page 51: 2013 lecture-02-syntax shortnewcut](https://reader036.vdocuments.net/reader036/viewer/2022081403/554f97a5b4c905ad218b471f/html5/thumbnails/51.jpg)