Mais conteúdo relacionado Mais de Russel Winder (20) Is Groovy static or dynamic1. Copyright © 2013 Russel Winder 1
Is Groovy Static or
Dynamic?
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk
4. Copyright © 2013 Russel Winder 4
Debate [d be t]ɪˈ ɪ
n
1. (Government, Politics & Diplomacy) a formal discussion, as in a legislative
body, in which opposing arguments are put forward
2. discussion or dispute
3. (Philosophy) the formal presentation and opposition of a specific motion,
followed by a vote
vb
1. to discuss (a motion), esp in a formal assembly
2. to deliberate upon (something) he debated with himself whether to go
[from Old French debatre to discuss, argue, from Latin battuere]
debater n
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003.
5. Copyright © 2013 Russel Winder 5
foment [f m nt]əˈ ɛ
vb (tr)
1. to encourage or instigate (trouble, discord, etc.); stir up
2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve
pain and inflammation
[from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō
fov re to foster]ē
fomentation [ f m n te n]ˌ əʊ ɛ ˈ ɪʃə n
fomenter n
Usage: Both foment and ferment can be used to talk about stirring up trouble:
he was accused of fomenting/fermenting unrest. Only ferment can be used
intransitively or as a noun: his anger continued to ferment (not foment); rural
areas were unaffected by the ferment in the cities
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
6. Copyright © 2013 Russel Winder 6
ferment
n [ f m nt]ˈ ɜː ɛ
1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance,
such as a bacterium, mould, yeast, or enzyme, that causes fermentation
2. (Life Sciences & Allied Applications / Biochemistry) another word for
fermentation
3. commotion; unrest
vb [f m nt]əˈ ɛ
1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to
undergo fermentation
2. to stir up or seethe with excitement
[from Latin fermentum yeast, from ferv re to seethe]ē
fermentable adj
fermentability n
fermenter n
Usage: See at foment
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
7. Copyright © 2013 Russel Winder 7
The intention of this session is to
foment debate.
11. Copyright © 2013 Russel Winder 11
2003
Groovy is created as the
dynamic symbiote to Java.
12. Copyright © 2013 Russel Winder 12
Dynamic languages have no typed variables.
15. Copyright © 2013 Russel Winder 15
Duck typing:
The receiver of the message decides the
meaning of the message.
16. Copyright © 2013 Russel Winder 16
Operators are not messages to a
receiving object in Java…
17. Copyright © 2013 Russel Winder 17
…Java isn't really an object-oriented language.
18. Copyright © 2013 Russel Winder 18
Fortunately, Groovy decided to follow Smalltalk,
and have a meta-object protocol.
19. Copyright © 2013 Russel Winder 19
Groovy is truly object-oriented,
message passing is the operational semantic,
and all variables are references to objects.
20. Copyright © 2013 Russel Winder 20
x * y
transforms to
x.plus(y)
to realize message passing with method call.
24. Copyright © 2013 Russel Winder 24
Java allows for despatch by signature,
i.e. methods can be overloaded.
26. Copyright © 2013 Russel Winder 26
Adding types to parameters is required
for despatch by signature.
27. Copyright © 2013 Russel Winder 27
static runtimeTyping(Number x, Number y) {
x * y
}
28. Copyright © 2013 Russel Winder 28
Groovy is an optionally typed language:
variables, not just function and method
parameters, may or may not be given a type.
29. Copyright © 2013 Russel Winder 29
Adding types works in harmony with
method overloading.
30. Copyright © 2013 Russel Winder 30
All type checking is at run time.
This is harmonious with duck typing.
32. Copyright © 2013 Russel Winder 32
2013
Groovy is the dynamic symbiote to Java,
and
Groovy can now be the static language
replacement for Java.
34. Copyright © 2013 Russel Winder 34
@TypeChecked
static staticTyping(x, y) {
x * y
}
35. Copyright © 2013 Russel Winder 35
Compile time interface conformance,
no duck typing.
38. Copyright © 2013 Russel Winder 38
@TypeChecked
static staticTyping(Number x, Number y) {
x * y
}
40. Copyright © 2013 Russel Winder 40
A totally different view of how computation
proceeds: a different computational model.
41. Copyright © 2013 Russel Winder 41
class ExpandoDynamic {
static void main(args) {
def x = new Expando()
x.multiply = { y -> x.data * y }
x.data = 'XX'
def y = 2
assert x * 2 == 'XXXX'
}
}
42. Copyright © 2013 Russel Winder 42
@TypeChecked
class ExpandoStatic {
static void main(args) {
def x = new Expando()
x.multiply = { y -> x.data * y }
x.data = 'XX'
def y = 2
assert x * 2 == 'XXXX'
}
}
43. Copyright © 2013 Russel Winder 43
Should a language support two disparate
computational models?
44. Copyright © 2013 Russel Winder 44
final class Thing {
final x
Thing(x) { this.x = x }
Thing multiply(Thing y) { new Thing(x * y.x) }
boolean equals(Thing y) { x == y.x }
boolean equals (Object y) { x == y }
String toString() { x.toString() }
}
x = new Thing('XX')
y = new Thing(2)
z = new Thing(2.0)
assert x * y == 'XXXX'
assert x * y == new Thing('XXXX')
assert x * z == 'XXXX'
assert x * z == new Thing('XXXX')
assert y * z == 4.0
assert y * z == new Thing(4.0)
assert z * y == 4.0
assert z * y == new Thing(4.0)
45. Copyright © 2013 Russel Winder 45
@TypeChecked
final class Thing {
final Integer x_i
final String x_s
Thing(Integer x) { this.x_i = x ; assert this.x_s == null }
Thing(String x) { this.x_s = x ; assert this.x_i == null }
Thing multiply(Thing y) {
if (x_i == null) { new Thing(StringGroovyMethods.multiply(x_s, (Number)y.x)) }
else { new Thing(x_i * y.x_i) }
}
Object getX() { x_i == null ? x_s : x_i }
boolean equals(Thing y) { x_i == null ? x_s == y.x_s : x_i == y.x_i }
boolean equals (Object y) { x == y }
String toString() { x.toString() }
}
x = new Thing('XX')
y = new Thing(2)
assert x * y == 'XXXX'
assert x * y == new Thing('XXXX')
47. Copyright © 2013 Russel Winder 47
class Duck {
static main(args) {
def total = 1
def data = [2, 3]
try {
total += data.sum()
}
catch (MissingMethodException mme) {
total = 0
}
assert total == 6
}
}
48. Copyright © 2013 Russel Winder 48
@TypeChecked
class NotDuck {
static void main(String[] args) {
Integer total = 1
List data = [2, 3]
total += (Integer)data.sum()
assert total == 6
}
}
51. Copyright © 2013 Russel Winder 51
…or should we embrace polyglot programming?
56. Copyright © 2013 Russel Winder 56
Personal experience useful.
We are allowed to debate and (dis)agree.
Create a personal view.
57. Copyright © 2013 Russel Winder 57
What is really needed is some objective research.
60. Copyright © 2013 Russel Winder 60
foment [f m nt]əˈ ɛ
vb (tr)
1. to encourage or instigate (trouble, discord, etc.); stir up
2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve
pain and inflammation
[from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō
fov re to foster]ē
fomentation [ f m n te n] nˌ əʊ ɛ ˈ ɪʃə
fomenter n
Usage: Both foment and ferment can be used to talk about stirring up trouble:
he was accused of fomenting/fermenting unrest. Only ferment can be used
intransitively or as a noun: his anger continued to ferment (not foment); rural
areas were unaffected by the ferment in the cities
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
61. Copyright © 2013 Russel Winder 61
ferment
n [ f m nt]ˈ ɜː ɛ
1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance,
such as a bacterium, mould, yeast, or enzyme, that causes fermentation
2. (Life Sciences & Allied Applications / Biochemistry) another word for
fermentation
3. commotion; unrest
vb [f m nt]əˈ ɛ
1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to
undergo fermentation
2. to stir up or seethe with excitement
[from Latin fermentum yeast, from ferv re to seethe]ē
fermentable adj
fermentability n
fermenter n
Usage: See at foment
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
63. Copyright © 2013 Russel Winder 63
Is Groovy Static or
Dynamic?
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk
64. Copyright © 2013 Russel Winder 64
Groovy is Static or Dynamic
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk