pharo hands-on: 02 syntax

30
Pharo: Syntax in a Nutshell S. Ducasse http://www.pharo.org

Upload: pharo

Post on 18-Jul-2015

91 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Pharo Hands-On: 02 syntax

Pharo: Syntax in a NutshellS. Ducasse http://www.pharo.org

Page 2: Pharo Hands-On: 02 syntax

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
Page 4: Pharo Hands-On: 02 syntax

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

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

postman.send(mail,recipient);

Page 7: Pharo Hands-On: 02 syntax

postman.send(mail,recipient);

Page 8: Pharo Hands-On: 02 syntax

postman send mail recipient

Page 9: Pharo Hands-On: 02 syntax

postman send mail to recipient

Page 10: Pharo Hands-On: 02 syntax

postman send: mail to: recipient

Page 11: Pharo Hands-On: 02 syntax

() > 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

Typical Expression

ZnEasy client

url: 'http://bugs.pharo.org/issues/name/', text asString;

get;

response.

Page 13: Pharo Hands-On: 02 syntax

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

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

Block: Lambda Expressions

[ :x | x + 2 ] value: 5

-> 7

!

anonymous method

[ ]

:x is the block arguments

Page 16: Pharo Hands-On: 02 syntax

Blocks can be stored

| b |

b := [ :x | x + 2 ].

b value: 5

-> 7

b value: 33

-> 35

Page 17: Pharo Hands-On: 02 syntax

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

ifTrue:

forceItalicOrOblique

self slantValue = 0 ifTrue: [ slantValue := 1 ]

Page 19: Pharo Hands-On: 02 syntax

ifFalse:ifTrue:

index = 0

ifFalse: [values at: index]

ifTrue: [self privateAt: key put: aBlock value]

Page 20: Pharo Hands-On: 02 syntax

ifEmpty:

(myProtocol

ifEmpty: ['As yet unclassified’]

!

self listItems

ifNotEmpty: [ :aList | aList at: currentIndex ]

Page 21: Pharo Hands-On: 02 syntax

Use [ ] when you do not know how many time it is executed.

( x isNil) ifTrue: [ .... ]

( ...) vs. [ ]

Page 22: Pharo Hands-On: 02 syntax

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

Some loops: to:by:do:

| sum |

0 to: 100 by: 3 [ :i | sum= sum + i ]

Page 24: Pharo Hands-On: 02 syntax

#(15 10 19 68) do:

[:i | Transcript show: i ; cr ]

Page 25: Pharo Hands-On: 02 syntax

#(15 10 19 68) do:

[:i | Transcript show: i ; cr ]

Page 26: Pharo Hands-On: 02 syntax

#(2 -3 4 -35 4) collect: [ :each| each abs]

Page 27: Pharo Hands-On: 02 syntax

#(2 -3 4 -35 4) collect: [ :each| each abs]

> #(2 3 4 35 4)

Page 28: Pharo Hands-On: 02 syntax

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

Class definition

Object subclass: #Point

instanceVariableNames: 'x y'

classVariableNames: ''

category: 'Graphics-Primitives'

Page 30: Pharo Hands-On: 02 syntax

Conclusion

Messages (unary, binary, keywords)

Blocks

Methods are named blocks