Download - Wicket and Scala

Transcript
Page 1: Wicket and Scala

Daan van Ettenhttp://stuq.nl

Amsterdam, March 24, 2009

Basic Wicket and Scala

Page 2: Wicket and Scala

Hi!

Page 3: Wicket and Scala

Goal:

After this talk, you can start coding Wicket in Scala.

Page 4: Wicket and Scala

Overview

Page 5: Wicket and Scala

Scala

Page 6: Wicket and Scala

ScalaWhat is

?

Page 7: Wicket and Scala

Hello, World!

Page 8: Wicket and Scala

Functional concepts

Page 9: Wicket and Scala

+

Page 10: Wicket and Scala

?

Page 11: Wicket and Scala

Simple project

Page 12: Wicket and Scala

maven

Page 13: Wicket and Scala

Java Scala

Page 14: Wicket and Scala
Page 15: Wicket and Scala

Who am I?

Page 16: Wicket and Scala

Daan van Etten

Page 17: Wicket and Scala

Daan van Etten

Software Engineer

Page 18: Wicket and Scala

Software Engineer

Daan van Etten

@work

Page 19: Wicket and Scala

Software Engineer

Daan van Etten

Page 20: Wicket and Scala

Let’s begin

Page 21: Wicket and Scala

ScalaWhat is

?

Page 22: Wicket and Scala

Scala

History

Page 23: Wicket and Scala

Scala

1958

Page 24: Wicket and Scala

Scala

Martin Odersky

Page 25: Wicket and Scala

Scala

Page 26: Wicket and Scala

Scala

Compilers

Page 27: Wicket and Scala

Scala

Functional languages

(more about that later)

Page 28: Wicket and Scala

Scala

Page 29: Wicket and Scala

Scala

GenericJava

Page 30: Wicket and Scala

Scala

Page 31: Wicket and Scala

Scala

Java 5Generics

Page 32: Wicket and Scala

Scala

New javac

Page 33: Wicket and Scala

Scala

2001

Page 34: Wicket and Scala

Scala

Scala

Page 35: Wicket and Scala

Scala

First release

Page 36: Wicket and Scala

Scala

2003

Page 37: Wicket and Scala

Scala

Object Oriented

Page 38: Wicket and Scala

Scala

Functional

Page 39: Wicket and Scala

Scala

Statically typed

Page 40: Wicket and Scala

Scala

Type inference

var foo = 8foo = “bar”

type mismatch;found: String("bar")required: Int

Page 41: Wicket and Scala

Scala

Every value is an object

var foo = 8def bar(a: String)= println(a)

Page 42: Wicket and Scala

1 + 3 - 61.+(3).-(6)

Scala

Every operation is a method call

Page 43: Wicket and Scala

Scala

Compiles toJava bytecode

Page 44: Wicket and Scala

Scala

Runs on theJava VM

Page 45: Wicket and Scala

Scala

ScalableFrom small scripts to large systems

Page 46: Wicket and Scala

Scala

Hello, World!

Page 47: Wicket and Scala

Scala

object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }

Page 48: Wicket and Scala

Scala

20 seconds

Page 49: Wicket and Scala

Scala

Page 50: Wicket and Scala

Scala

Page 51: Wicket and Scala

Scala

Page 52: Wicket and Scala

Scala

Functional concepts

Page 53: Wicket and Scala

ScalaDesign goals:

Embrace immutabilityAvoid state

Page 54: Wicket and Scala

Scala

Cleaner code

More !ne-grained reuseNo Iterator loops needed :-)

Page 55: Wicket and Scala

Scala

Better optimizationsMulti-core!

Lazy evaluationRecursion

Page 56: Wicket and Scala

Scala

What aboutthe functions?

Page 57: Wicket and Scala

1 + 3 - 61.+(3).-(6)

Scala

Every operation is a method call

Page 58: Wicket and Scala

Scala

def function1(x : Int) = { def function2() = { println(x) } function2()}

Function nesting

Page 59: Wicket and Scala

Scala

def foo (cb: ()=>Unit): Unit = { while (true) { cb(); Thread.sleep(1000); }}

foo(Unit : println("hi"))

First-class functions

Page 60: Wicket and Scala

First-class functions in libraries

Scala

val numbers = List(2,5,8,9)numbers.foreach( (x: Int) => print(x) )

Page 61: Wicket and Scala

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

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

+

Page 64: Wicket and Scala

Simple project

+

Page 65: Wicket and Scala

+

Hello, Wicket World!

Page 66: Wicket and Scala

object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }

+

Page 67: Wicket and Scala

class HelloWorld extends WebApplication { def main(args: Array[String]) { println("Hello, world!") } }

+

Page 68: Wicket and Scala

class HelloWorld extends WebApplication {

}

+

Page 69: Wicket and Scala

class HelloWorld extends WebApplication { def getHomePage = classOf[HomePage]}

+

Page 70: Wicket and Scala

class HelloWorld extends WebApplication { def getHomePage = classOf[HomePage]}class HomePage extends WebPage {

}

+

Page 71: Wicket and Scala

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

<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

+

Page 74: Wicket and Scala

?

Page 75: Wicket and Scala

+

Page 76: Wicket and Scala

EASYREUSABLE

NON-INTRUSIVESAFE

EFFICIENT SCALABLE

Page 77: Wicket and Scala

EASY

Page 78: Wicket and Scala

EASYPOJO-centric

Page 79: Wicket and Scala

EASYAll code in Java

Page 80: Wicket and Scala

EASYAll code in Java

or Scala

Page 81: Wicket and Scala

EASYMaximum type safety and

compile-time problem diagnosis

Page 82: Wicket and Scala

EASYMinimum reliance on

special tools

Page 83: Wicket and Scala

EASY

Page 84: Wicket and Scala

REUSABLE

Page 85: Wicket and Scala

REUSABLE

Function reuse

Page 86: Wicket and Scala

REUSABLE

Page 87: Wicket and Scala

NON-INTRUSIVE

Page 88: Wicket and Scala

HTML or other markupnot polluted with

programming semantics

NON-INTRUSIVE

Page 89: Wicket and Scala

But... Scala != Java

NON-INTRUSIVE

Page 90: Wicket and Scala

NON-INTRUSIVE

?

Page 91: Wicket and Scala

SAFE

Page 92: Wicket and Scala

Code is secure by default

SAFE

Page 93: Wicket and Scala

SAFEAll logic in Java (or Scala)

with maximum type safety

Page 94: Wicket and Scala

SAFE

Page 95: Wicket and Scala

EFFICIENT / SCALABLE

Page 96: Wicket and Scala

E!cient and lightweight

EFFICIENT / SCALABLE

Page 97: Wicket and Scala

Scala means reducingthe amount of code.

EFFICIENT / SCALABLE

Page 98: Wicket and Scala

EFFICIENT / SCALABLE

Page 99: Wicket and Scala

EASYREUSABLE

NON-INTRUSIVESAFE

EFFICIENT SCALABLE

Page 100: Wicket and Scala
Page 101: Wicket and Scala

maven

Page 102: Wicket and Scala

maven-scala-plugin

maven

Page 103: Wicket and Scala

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

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

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

mavenUnder <dependencies>

<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.7.3</version></dependency>

Page 107: Wicket and Scala

maven

You can add this to anyJava+Maven project!

Page 108: Wicket and Scala

maven

Project layout

Page 109: Wicket and Scala

maven

src

pom.xml

main

java

test

java

Page 110: Wicket and Scala

maven

src

pom.xml

main

scala

test

scala

Page 111: Wicket and Scala

maven

src

pom.xml

main

java

test

java

scala

scala

Page 112: Wicket and Scala

maven

Hello, Wicket World!built in Maven

Page 113: Wicket and Scala

maven

Page 114: Wicket and Scala

maven

Page 115: Wicket and Scala

Download thedemo project.

Page 116: Wicket and Scala

Java Scala

Page 117: Wicket and Scala

Java Scala

Java interfaceimplemented in Scala

Page 118: Wicket and Scala

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

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

Java Scala

Scala does not have interfaces!

Page 121: Wicket and Scala

Java Scala

Scala has traits

Page 122: Wicket and Scala

Java Scala

class SomeImplementation extends SomeInterface { def doSomething(argument: String) : unit = { println(argument) }}

extending a trait

Page 123: Wicket and Scala

Java Scala

interface != trait

Page 124: Wicket and Scala

Java Scala

traits can havemethod

implementations

Page 125: Wicket and Scala

Java Scala

public interface SomeInterface { void doSomething(String argument);}

trait SomeTrait { def doSomething=(argument:String):Unit}

Page 126: Wicket and Scala

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

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

Java Scala

public interface SomeInterface { void doSomething(String argument);}

class SomeImplementation extends SomeInterface {

}

Page 129: Wicket and Scala

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

Java Scala

Java and Scala combined:Circular dependencies

Page 131: Wicket and Scala

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

Handles circular

dependencies!

Java Scala

maven-scala-plugin

Page 133: Wicket and Scala

Java Scala

How?

Page 134: Wicket and Scala

Java Scala

scalac

parses Java code(since 2.7.2)

Page 135: Wicket and Scala

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
Page 137: Wicket and Scala
Page 138: Wicket and Scala

Scala home on the web.

Reference manuals, tutorials,news, speci!cations.

http://www.scala-lang.org

Page 139: Wicket and Scala

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

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

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

Scala Wiki.

FAQ, code samples, design patterns, Scala job openings

http://scala.sygneca.com/

Page 143: Wicket and Scala

O"cial mailing lists

Subscribe: empty message [email protected]#.ch

http://www.scala-lang.org/node/199

Page 144: Wicket and Scala

All samples can be downloaded at

http://stuq.nl

Page 145: Wicket and Scala

Get started with Scala and Wicket!

Page 146: Wicket and Scala

Thanks!


Top Related