wicket and scala
DESCRIPTION
Tutorial Wicket And ScalaTRANSCRIPT
![Page 1: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/1.jpg)
Daan van Ettenhttp://stuq.nl
Amsterdam, March 24, 2009
Basic Wicket and Scala
![Page 2: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/2.jpg)
Hi!
![Page 3: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/3.jpg)
Goal:
After this talk, you can start coding Wicket in Scala.
![Page 4: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/4.jpg)
Overview
![Page 5: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/5.jpg)
Scala
![Page 6: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/6.jpg)
ScalaWhat is
?
![Page 7: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/7.jpg)
Hello, World!
![Page 8: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/8.jpg)
Functional concepts
![Page 9: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/9.jpg)
+
![Page 10: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/10.jpg)
?
![Page 11: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/11.jpg)
Simple project
![Page 12: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/12.jpg)
maven
![Page 13: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/13.jpg)
Java Scala
![Page 14: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/14.jpg)
![Page 15: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/15.jpg)
Who am I?
![Page 16: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/16.jpg)
Daan van Etten
![Page 17: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/17.jpg)
Daan van Etten
Software Engineer
![Page 18: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/18.jpg)
Software Engineer
Daan van Etten
@work
![Page 19: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/19.jpg)
Software Engineer
Daan van Etten
![Page 20: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/20.jpg)
Let’s begin
![Page 21: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/21.jpg)
ScalaWhat is
?
![Page 22: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/22.jpg)
Scala
History
![Page 23: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/23.jpg)
Scala
1958
![Page 24: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/24.jpg)
Scala
Martin Odersky
![Page 25: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/25.jpg)
Scala
![Page 26: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/26.jpg)
Scala
Compilers
![Page 27: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/27.jpg)
Scala
Functional languages
(more about that later)
![Page 28: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/28.jpg)
Scala
![Page 29: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/29.jpg)
Scala
GenericJava
![Page 30: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/30.jpg)
Scala
![Page 31: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/31.jpg)
Scala
Java 5Generics
![Page 32: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/32.jpg)
Scala
New javac
![Page 33: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/33.jpg)
Scala
2001
![Page 34: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/34.jpg)
Scala
Scala
![Page 35: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/35.jpg)
Scala
First release
![Page 36: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/36.jpg)
Scala
2003
![Page 37: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/37.jpg)
Scala
Object Oriented
![Page 38: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/38.jpg)
Scala
Functional
![Page 39: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/39.jpg)
Scala
Statically typed
![Page 40: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/40.jpg)
Scala
Type inference
var foo = 8foo = “bar”
type mismatch;found: String("bar")required: Int
![Page 41: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/41.jpg)
Scala
Every value is an object
var foo = 8def bar(a: String)= println(a)
![Page 42: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/42.jpg)
1 + 3 - 61.+(3).-(6)
Scala
Every operation is a method call
![Page 43: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/43.jpg)
Scala
Compiles toJava bytecode
![Page 44: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/44.jpg)
Scala
Runs on theJava VM
![Page 45: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/45.jpg)
Scala
ScalableFrom small scripts to large systems
![Page 46: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/46.jpg)
Scala
Hello, World!
![Page 47: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/47.jpg)
Scala
object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }
![Page 48: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/48.jpg)
Scala
20 seconds
![Page 49: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/49.jpg)
Scala
![Page 50: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/50.jpg)
Scala
![Page 51: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/51.jpg)
Scala
![Page 52: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/52.jpg)
Scala
Functional concepts
![Page 53: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/53.jpg)
ScalaDesign goals:
Embrace immutabilityAvoid state
![Page 54: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/54.jpg)
Scala
Cleaner code
More !ne-grained reuseNo Iterator loops needed :-)
![Page 55: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/55.jpg)
Scala
Better optimizationsMulti-core!
Lazy evaluationRecursion
![Page 56: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/56.jpg)
Scala
What aboutthe functions?
![Page 57: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/57.jpg)
1 + 3 - 61.+(3).-(6)
Scala
Every operation is a method call
![Page 58: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/58.jpg)
Scala
def function1(x : Int) = { def function2() = { println(x) } function2()}
Function nesting
![Page 59: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/59.jpg)
Scala
def foo (cb: ()=>Unit): Unit = { while (true) { cb(); Thread.sleep(1000); }}
foo(Unit : println("hi"))
First-class functions
![Page 60: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/60.jpg)
First-class functions in libraries
Scala
val numbers = List(2,5,8,9)numbers.foreach( (x: Int) => print(x) )
![Page 61: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/61.jpg)
Anonymous functions
Scala
((i:Int, j:Int) => i + j)(3, 4)
Java:int calc(int i, int j){ return i + j; }; calc(3, 4);
![Page 62: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/62.jpg)
Scala
Partially applied functions
def calc(x:Int, y:Int, z:Int)=x+y+z
val calcPart = calc(1, _:Int, 3)
calcPart(4)
![Page 63: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/63.jpg)
+
![Page 64: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/64.jpg)
Simple project
+
![Page 65: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/65.jpg)
+
Hello, Wicket World!
![Page 66: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/66.jpg)
object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }
+
![Page 67: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/67.jpg)
class HelloWorld extends WebApplication { def main(args: Array[String]) { println("Hello, world!") } }
+
![Page 68: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/68.jpg)
class HelloWorld extends WebApplication {
}
+
![Page 69: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/69.jpg)
class HelloWorld extends WebApplication { def getHomePage = classOf[HomePage]}
+
![Page 70: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/70.jpg)
class HelloWorld extends WebApplication { def getHomePage = classOf[HomePage]}class HomePage extends WebPage {
}
+
![Page 71: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/71.jpg)
class HelloWorld extends WebApplication { def getHomePage = classOf[HomePage]}class HomePage extends WebPage {
}
+
var name = "" val form = new Form("form") add(form) form.add(new TextField("name", new PropertyModel(this, "name"))) form.add(new Label("helloworld", new PropertyModel(this, "name")))
![Page 72: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/72.jpg)
<body> <p><b>Hello, Wicket World!</b></p> <form wicket:id="form"> What's your name? <br/> <input wicket:id="name"/> <input type="submit" value = "OK" />
<p>Your name is: <b><span wicket:id="helloworld"/></b> </p> </form></body>
+
![Page 73: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/73.jpg)
+
![Page 74: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/74.jpg)
?
![Page 75: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/75.jpg)
+
![Page 76: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/76.jpg)
EASYREUSABLE
NON-INTRUSIVESAFE
EFFICIENT SCALABLE
![Page 77: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/77.jpg)
EASY
![Page 78: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/78.jpg)
EASYPOJO-centric
![Page 79: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/79.jpg)
EASYAll code in Java
![Page 80: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/80.jpg)
EASYAll code in Java
or Scala
![Page 81: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/81.jpg)
EASYMaximum type safety and
compile-time problem diagnosis
![Page 82: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/82.jpg)
EASYMinimum reliance on
special tools
![Page 83: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/83.jpg)
EASY
![Page 84: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/84.jpg)
REUSABLE
![Page 85: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/85.jpg)
REUSABLE
Function reuse
![Page 86: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/86.jpg)
REUSABLE
![Page 87: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/87.jpg)
NON-INTRUSIVE
![Page 88: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/88.jpg)
HTML or other markupnot polluted with
programming semantics
NON-INTRUSIVE
![Page 89: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/89.jpg)
But... Scala != Java
NON-INTRUSIVE
![Page 90: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/90.jpg)
NON-INTRUSIVE
?
![Page 91: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/91.jpg)
SAFE
![Page 92: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/92.jpg)
Code is secure by default
SAFE
![Page 93: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/93.jpg)
SAFEAll logic in Java (or Scala)
with maximum type safety
![Page 94: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/94.jpg)
SAFE
![Page 95: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/95.jpg)
EFFICIENT / SCALABLE
![Page 96: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/96.jpg)
E!cient and lightweight
EFFICIENT / SCALABLE
![Page 97: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/97.jpg)
Scala means reducingthe amount of code.
EFFICIENT / SCALABLE
![Page 98: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/98.jpg)
EFFICIENT / SCALABLE
![Page 99: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/99.jpg)
EASYREUSABLE
NON-INTRUSIVESAFE
EFFICIENT SCALABLE
![Page 100: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/100.jpg)
![Page 101: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/101.jpg)
maven
![Page 102: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/102.jpg)
maven-scala-plugin
maven
![Page 103: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/103.jpg)
mavenUnder <build> <plugins><plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions></plugin>
![Page 104: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/104.jpg)
mavenUnder <pluginRepositories>
<pluginRepository> <id>scala</id> <name>Scala Tools</name> <url>http://scala-tools.org/repo-releases</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots></pluginRepository>
![Page 105: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/105.jpg)
mavenUnder <repositories>
<repository> <id>scala</id> <name>Scala Tools</name> <url>http://scala-tools.org/repo-releases</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots></repository>
![Page 106: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/106.jpg)
mavenUnder <dependencies>
<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.7.3</version></dependency>
![Page 107: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/107.jpg)
maven
You can add this to anyJava+Maven project!
![Page 108: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/108.jpg)
maven
Project layout
![Page 109: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/109.jpg)
maven
src
pom.xml
main
java
test
java
![Page 110: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/110.jpg)
maven
src
pom.xml
main
scala
test
scala
![Page 111: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/111.jpg)
maven
src
pom.xml
main
java
test
java
scala
scala
![Page 112: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/112.jpg)
maven
Hello, Wicket World!built in Maven
![Page 113: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/113.jpg)
maven
![Page 114: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/114.jpg)
maven
![Page 115: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/115.jpg)
Download thedemo project.
![Page 116: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/116.jpg)
Java Scala
![Page 117: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/117.jpg)
Java Scala
Java interfaceimplemented in Scala
![Page 118: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/118.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
class SomeImplementation extends SomeInterface { def doSomething(argument: String):Unit = { println(argument) }}
public interface SomeInterface { void doSomething(String argument);}
![Page 119: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/119.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
class SomeImplementation extends SomeInterface { def doSomething(argument: String):unit = { println(argument) }}
?
![Page 120: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/120.jpg)
Java Scala
Scala does not have interfaces!
![Page 121: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/121.jpg)
Java Scala
Scala has traits
![Page 122: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/122.jpg)
Java Scala
class SomeImplementation extends SomeInterface { def doSomething(argument: String) : unit = { println(argument) }}
extending a trait
![Page 123: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/123.jpg)
Java Scala
interface != trait
![Page 124: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/124.jpg)
Java Scala
traits can havemethod
implementations
![Page 125: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/125.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
trait SomeTrait { def doSomething=(argument:String):Unit}
![Page 126: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/126.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
trait SomeTrait { def doSomething(argument:String):Unit def computeSomething = title.length * 10}
![Page 127: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/127.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
class SomeImplementation extends SomeInterface { def doSomething(argument: String):Unit = { println(argument) }}
![Page 128: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/128.jpg)
Java Scala
public interface SomeInterface { void doSomething(String argument);}
class SomeImplementation extends SomeInterface {
}
![Page 129: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/129.jpg)
Java Scala
Error: class SomeImplementation needs to be abstract, since method doSomething in trait SomeInterface of type (java.lang.String)Unit is not defined.
![Page 130: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/130.jpg)
Java Scala
Java and Scala combined:Circular dependencies
![Page 131: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/131.jpg)
class SomeImplementation extends SomeInterface { def doSomething=(argument:String):Unit {...}}
public interface SomeInterface { void doSomething(String argument);}
Java Scala
public class Other extends SomeImplementation { ...}
![Page 132: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/132.jpg)
Handles circular
dependencies!
Java Scala
maven-scala-plugin
![Page 133: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/133.jpg)
Java Scala
How?
![Page 134: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/134.jpg)
Java Scala
scalac
parses Java code(since 2.7.2)
![Page 135: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/135.jpg)
class SomeImplementation extends SomeInterface { def doSomething=(argument:String):Unit {...}}
public interface SomeInterface { void doSomething(String argument);}
Java Scala
public class Other extends SomeImplementation { ...}
![Page 136: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/136.jpg)
![Page 137: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/137.jpg)
![Page 138: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/138.jpg)
Scala home on the web.
Reference manuals, tutorials,news, speci!cations.
http://www.scala-lang.org
![Page 139: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/139.jpg)
Interpreter, variables, methods, loops, arrays, lists, tuples, sets, maps, classes,
singletons, traits, mixins.
http://www.artima.com/scalazine/articles/steps.html
![Page 140: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/140.jpg)
Multiple articles covering afeature by feature comparison
of Scala and Java
http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
![Page 141: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/141.jpg)
Series of 6 great articlescovering a lot of Scala.
Aimed at Java developers.
http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees
![Page 142: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/142.jpg)
Scala Wiki.
FAQ, code samples, design patterns, Scala job openings
http://scala.sygneca.com/
![Page 143: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/143.jpg)
O"cial mailing lists
Subscribe: empty message [email protected]#.ch
http://www.scala-lang.org/node/199
![Page 145: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/145.jpg)
Get started with Scala and Wicket!
![Page 146: Wicket and Scala](https://reader030.vdocuments.site/reader030/viewer/2022012901/54612f6fb1af9fc15b8b4bda/html5/thumbnails/146.jpg)
Thanks!