SlideShare une entreprise Scribd logo
1  sur  74
Sven Naumann, Marcel Rehfeld © Sven Naumann, Marcel Rehfeld
Lernziele ,[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Gliederung ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
1. Einleitung ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],sc alable la nguage © Sven Naumann, Marcel Rehfeld
2. Geschichte ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Scala im Vergleich zu Java vs.  © Sven Naumann, Marcel Rehfeld
3. Scala im Vergleich zu Java ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Vereinbarung ,[object Object],System.out.println(“Ich bin Java-Code.”) println(“Ich bin Scala-Code.”) © Sven Naumann, Marcel Rehfeld
Einführung © Sven Naumann, Marcel Rehfeld
HelloWorld.scala ,[object Object],[object Object],[object Object],object Main extends Application { println("Hello TIT07AIN :-)") } © Sven Naumann, Marcel Rehfeld
Beispiel - main Methode ,[object Object],[object Object],[object Object],[object Object],object Main { def main(args:Array[String]):Unit = { println(args(0)) } } © Sven Naumann, Marcel Rehfeld
Beispiel - main Methode (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],public static void main(String[] args) { def main(args:Array[String]):Unit = { © Sven Naumann, Marcel Rehfeld
Iteration ,[object Object],[object Object],[object Object],[object Object],for (i:Int <- 0 until args.length) { println(args(i)) } for (int i = 0; i < args.length; i++) { System.out.println(args[i]); } val range:Range = 0.until(args.length) for (i <- range) { © Sven Naumann, Marcel Rehfeld
Iteration (2) ,[object Object],[object Object],[object Object],args.foreach(a => { println(a) }) for (String a:args) { System.out.println(a); } args.foreach(a => println(a)) © Sven Naumann, Marcel Rehfeld
While-Schleife ,[object Object],var i = 0;  while (i < 1000000) { ...; i = i+1 } var i = 0;  do { ...; i = i+1 } while (x < 10) © Sven Naumann, Marcel Rehfeld
Built-in Types ,[object Object],[object Object],[object Object],scala.Predef.String scala.Int Array[String] java.lang.String Int  (Java primitive) String[] © Sven Naumann, Marcel Rehfeld
Objektorientierung © Sven Naumann, Marcel Rehfeld
Import ,[object Object],[object Object],import java.awt.*; import java.awt._ import java.awt.Color; import java.awt.Graphics; import java.awt.{Color, Graphics} © Sven Naumann, Marcel Rehfeld
Klassen ,[object Object],[object Object],[object Object],[object Object],class SomeTestClass { //...  } class NewTestClass extends SomeTestClass { //...  } © Sven Naumann, Marcel Rehfeld
Reihenfolge der Deklarationen ,[object Object],[object Object],class Sum { def summe() = zahlEins()+zahlZwei() def zahlEins() = 1 def zahlZwei() = 2 } class Sportscar extends Auto { ... } abstract class Auto { ... } © Sven Naumann, Marcel Rehfeld
Klassen Felder ,[object Object],[object Object],[object Object],[object Object],abstract class Car { var name:String = null } © Sven Naumann, Marcel Rehfeld
Klassen Felder (2) ,[object Object],public class Sportscar { public String name; } public class Sportscar { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } © Sven Naumann, Marcel Rehfeld
Klassen Felder (3) ,[object Object],[object Object],[object Object],abstract class Car{ var name:String = null } © Sven Naumann, Marcel Rehfeld
Klassen Felder (4) ,[object Object],abstract class Car { private var theName:String = null def name = theName def name_=(name:String)={ if (name != &quot;Smart&quot;){ theName = name println(&quot;Changed name to &quot;+name) }else{ println(&quot;This is no car!&quot;) } } } © Sven Naumann, Marcel Rehfeld
Klassen Felder (5) ,[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Konstruktoren ,[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Konstruktoren (2) ,[object Object],[object Object],[object Object],class TestClassCallsMethod { private var number =1 if (number < 3) { lessThree(number) } def lessThree(value:Int) = println(value+” is less than 3”) } var test = new TestClassCallsMethod() © Sven Naumann, Marcel Rehfeld
Konstruktoren (3) public class TestClass{ public TestClass(int number) { if (number > 3) { System.out.println(”Enough testing.&quot;); }  } public void doSomething() { ... } } TestClass test =new Testclass(4);  // “Enough testing.” class TestClass(number:Int) { if (number > 3) { println(”Enough testing.&quot;) } def doSomething() = { ... } } var test = new TestClass(4)  // “Enough testing.”  © Sven Naumann, Marcel Rehfeld
Konstruktoren (4) ,[object Object],[object Object],class Citycar(ps:Int) extends Car { if (ps < 40) { println(&quot;Slow&quot;) } else { println(&quot;Fast&quot;) } def this() = { this(40) println(&quot;set default ps: 40&quot;) } } © Sven Naumann, Marcel Rehfeld
Konstruktor Parameter ,[object Object],[object Object],[object Object],[object Object],class TravelCar(trips:Int) extends Car{ def moreThanFive = trips > 5  } © Sven Naumann, Marcel Rehfeld
Konstruktor Parameter (2) ,[object Object],class TravelingTravelCar(var trips:Int) extends Car { def moreThanFive = trips > 5 def madeTrip() = { trips += 1 println(&quot;Made a trip, now &quot;+trips+&quot; trips.&quot;) }  } © Sven Naumann, Marcel Rehfeld
Konstruktor Parameter (3) public class Complex { private int a, b; public Complex(int a, int b) { this.a = a; this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } } final Complex number = new Complex(1,0); number.setB(12); class Complex(var a:Int, var b:Int) val number = new Complex(1, 0) number.b = 12 © Sven Naumann, Marcel Rehfeld
Methoden © Sven Naumann, Marcel Rehfeld
[object Object],[object Object],[object Object],[object Object],[object Object],Methoden package testing.methods class MethodTestClass { protected[testing.methods] def method() = { ... } protected[de.dhbw.mannheim] def method() = { ... } } def method() = { ... } protected def method() = { ... } © Sven Naumann, Marcel Rehfeld
Methoden (2) ,[object Object],[object Object],[object Object],[object Object],private def method() = { ... } package testing.methods class MethodTestClass { protected[testing.methods] def method() = { ... } } © Sven Naumann, Marcel Rehfeld
Methoden (3) ,[object Object],[object Object],[object Object],[object Object],final def finalMethod():String = &quot;FinalValue&quot; def abstractMethod():String public abstract String abstractMethod(); @native def nativeMethod():String © Sven Naumann, Marcel Rehfeld
Methoden (4) ,[object Object],def syncMethod() = { synchronized { ... } } public synchronized void syncMethod() { ... } © Sven Naumann, Marcel Rehfeld
Methoden (5) ,[object Object],[object Object],def giveForename(name:String) = {  var tmp = name.split(' ') tmp(0) } giveForename(&quot;Sven Naumann&quot;) def giveForename(name:String):String = {  var tmp = name.split(' ') return tmp(0) } © Sven Naumann, Marcel Rehfeld
Überschreiben von Methoden ,[object Object],[object Object],[object Object],class Car { def drive() = println(&quot;driving 140km/h&quot;) } class SportsCar extends Car { override def drive() = println(&quot;driving 240km/h&quot;) } © Sven Naumann, Marcel Rehfeld
Überschreiben von Methoden (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Static? ,[object Object],[object Object],public class TestClass { public static int  a  = 1; } object TestClass {  val  a : Int  } public class TestClass { private static TestClass instance; public int  a ; private TestClass() {} public static synchronized TestClass getInstance() { ... } } © Sven Naumann, Marcel Rehfeld
Static? (2) ,[object Object],[object Object],[object Object],[object Object],public class TestClass { public static int a = 1; public int b; } object TestClass {  val a: Int  } class TestClass {  val b: Int;  } © Sven Naumann, Marcel Rehfeld
Pattern Matching, Case Classes & Exceptions © Sven Naumann, Marcel Rehfeld
Pattern Matching ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],public boolean checkPrime(int number) { switch (number) { case 1: return true; case 2: return true; case 3: return true; case 5: return true; case 7: return true; default: return false; } } © Sven Naumann, Marcel Rehfeld
Pattern Matching (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],def matchTest(x: Int): String = x match { case 1 => &quot;one&quot; case 2 => &quot;two&quot; case _ => &quot;many&quot; } println(matchTest(2))  // “two” © Sven Naumann, Marcel Rehfeld
Pattern Matching (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],def matchTest2(x: Any): Any = x match { case 1 => &quot;one&quot; case &quot;two&quot; => 2 case y: Int => ”Integer” case _ => “null” } println(matchTest2(&quot;two&quot;))  // 2 © Sven Naumann, Marcel Rehfeld
Case Classes © Sven Naumann, Marcel Rehfeld
Case Classes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Case Classes (2) ,[object Object],case class Number(value:Int) def checkPrime(n:Number) = n match { case Number(1) => true case Number(2) => true case Number(3) => true case Number(5) => true case Number(7) => true case Number(_) => false } println(checkPrime(Number(5)))  // true println(checkPrime(Number(12)))  // false © Sven Naumann, Marcel Rehfeld
Case Classes (3) © Sven Naumann, Marcel Rehfeld
Case Classes (4) class Color(val red:Int, val green:Int, val blue:Int) case class Red(r:Int) extends Color(r, 0, 0) case class Green(g:Int) extends Color(0, g, 0) case class Blue(b:Int) extends Color(0, 0, b) def printColor(c:Color) = c match { case Red(v) => println(&quot;Red: &quot; + v) case Green(v) => println(&quot;Green: &quot; + v) case Blue(v) => println(&quot;Blue: &quot; + v) case col:Color => { print(&quot;R: &quot; + col.red + &quot;, &quot;) print(&quot;G: &quot; + col.green + &quot;, &quot;) println(&quot;B: &quot; + col.blue) } case null => println(&quot;Invalid color&quot;) } © Sven Naumann, Marcel Rehfeld
Case Classes (5) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Exception Handling © Sven Naumann, Marcel Rehfeld
Exception Handling ,[object Object],[object Object],[object Object],[object Object],def doAnythingUntilFive(n:Int) = { if (n < 1 || n > 5) { throw new IllegalArgumentException(”Some Error.&quot;) } //... } © Sven Naumann, Marcel Rehfeld
Exception Handling (2) ,[object Object],[object Object],[object Object],try{ doAnythingUntilFive(7) } catch { case e:IllegalArgumentException => e.printStackTrace() // ... case e => { println(“Some other exception.”); e.printStackTrace() } } © Sven Naumann, Marcel Rehfeld
Traits © Sven Naumann, Marcel Rehfeld
Traits ,[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Traits (2) ,[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Traits (3) abstract class APerson { def sleep() } trait TStudent extends APerson { override def sleep() = { println(&quot;sleeping 8h&quot;) } def learn() = { println(&quot;learing..&quot;) } } trait TWorker extends APerson { override def sleep() = { println(&quot;sleeping 6h&quot;) } def work() = { println(&quot;working..&quot;) } } class CollegeStudent extends TWorker with TStudent {  } © Sven Naumann, Marcel Rehfeld
Traits (4) ,[object Object],class CollegeStudent extends TWorker with TStudent with TLateRiser { } © Sven Naumann, Marcel Rehfeld
Traits (5) ,[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Interoperabilität zwischen  Java und Scala © Sven Naumann, Marcel Rehfeld
Interoperabilität zwischen  Java und Scala ,[object Object],[object Object],[object Object],class SomeShowClass extends SomeSuperClass{ private var isThisTrue = false def setTrue(b:Boolean){ isThisTrue = b } } public class AnyJavaImpl extends SomeShowClass{ //... some Java Actions } © Sven Naumann, Marcel Rehfeld
Interoperabilität zwischen  Java und Scala (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Vorteile und Nachteile © Sven Naumann, Marcel Rehfeld
4. Vorteile und Nachteile ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
4. Vorteile und Nachteile (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
4. Vorteile und Nachteile (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Werkzeuge © Sven Naumann, Marcel Rehfeld
5. Werkzeuge ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Einsatzgebiete und Ausblick © Sven Naumann, Marcel Rehfeld
6. Einsatzgebiete ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
7. Ausblick ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld
Literatur ,[object Object],[object Object],[object Object],[object Object],© Sven Naumann, Marcel Rehfeld

Contenu connexe

Similaire à Einführung in Scala im Vergleich mit Java

Similaire à Einführung in Scala im Vergleich mit Java (8)

Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to Ruby
 
Scala
ScalaScala
Scala
 
Scala und Lift
Scala und LiftScala und Lift
Scala und Lift
 
Scala Workshop
Scala WorkshopScala Workshop
Scala Workshop
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Webcon 2012 Mobile Development mit Sencha Touch
Webcon 2012  Mobile Development mit Sencha TouchWebcon 2012  Mobile Development mit Sencha Touch
Webcon 2012 Mobile Development mit Sencha Touch
 

Einführung in Scala im Vergleich mit Java

  • 1. Sven Naumann, Marcel Rehfeld © Sven Naumann, Marcel Rehfeld
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. Scala im Vergleich zu Java vs. © Sven Naumann, Marcel Rehfeld
  • 7.
  • 8.
  • 9. Einführung © Sven Naumann, Marcel Rehfeld
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. Objektorientierung © Sven Naumann, Marcel Rehfeld
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. Konstruktoren (3) public class TestClass{ public TestClass(int number) { if (number > 3) { System.out.println(”Enough testing.&quot;); } } public void doSomething() { ... } } TestClass test =new Testclass(4); // “Enough testing.” class TestClass(number:Int) { if (number > 3) { println(”Enough testing.&quot;) } def doSomething() = { ... } } var test = new TestClass(4) // “Enough testing.” © Sven Naumann, Marcel Rehfeld
  • 29.
  • 30.
  • 31.
  • 32. Konstruktor Parameter (3) public class Complex { private int a, b; public Complex(int a, int b) { this.a = a; this.b = b; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } } final Complex number = new Complex(1,0); number.setB(12); class Complex(var a:Int, var b:Int) val number = new Complex(1, 0) number.b = 12 © Sven Naumann, Marcel Rehfeld
  • 33. Methoden © Sven Naumann, Marcel Rehfeld
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43. Pattern Matching, Case Classes & Exceptions © Sven Naumann, Marcel Rehfeld
  • 44.
  • 45.
  • 46.
  • 47. Case Classes © Sven Naumann, Marcel Rehfeld
  • 48.
  • 49.
  • 50. Case Classes (3) © Sven Naumann, Marcel Rehfeld
  • 51. Case Classes (4) class Color(val red:Int, val green:Int, val blue:Int) case class Red(r:Int) extends Color(r, 0, 0) case class Green(g:Int) extends Color(0, g, 0) case class Blue(b:Int) extends Color(0, 0, b) def printColor(c:Color) = c match { case Red(v) => println(&quot;Red: &quot; + v) case Green(v) => println(&quot;Green: &quot; + v) case Blue(v) => println(&quot;Blue: &quot; + v) case col:Color => { print(&quot;R: &quot; + col.red + &quot;, &quot;) print(&quot;G: &quot; + col.green + &quot;, &quot;) println(&quot;B: &quot; + col.blue) } case null => println(&quot;Invalid color&quot;) } © Sven Naumann, Marcel Rehfeld
  • 52.
  • 53. Exception Handling © Sven Naumann, Marcel Rehfeld
  • 54.
  • 55.
  • 56. Traits © Sven Naumann, Marcel Rehfeld
  • 57.
  • 58.
  • 59. Traits (3) abstract class APerson { def sleep() } trait TStudent extends APerson { override def sleep() = { println(&quot;sleeping 8h&quot;) } def learn() = { println(&quot;learing..&quot;) } } trait TWorker extends APerson { override def sleep() = { println(&quot;sleeping 6h&quot;) } def work() = { println(&quot;working..&quot;) } } class CollegeStudent extends TWorker with TStudent { } © Sven Naumann, Marcel Rehfeld
  • 60.
  • 61.
  • 62. Interoperabilität zwischen Java und Scala © Sven Naumann, Marcel Rehfeld
  • 63.
  • 64.
  • 65. Vorteile und Nachteile © Sven Naumann, Marcel Rehfeld
  • 66.
  • 67.
  • 68.
  • 69. Werkzeuge © Sven Naumann, Marcel Rehfeld
  • 70.
  • 71. Einsatzgebiete und Ausblick © Sven Naumann, Marcel Rehfeld
  • 72.
  • 73.
  • 74.

Notes de l'éditeur

  1. in Scala vorstellen, dass beides gleich ist. nur sehr umständlich altes beispiel vom auto:
  2. Demo in Eclipse: Große Vorteile: ist private, sieht aber aus, wie ein public, code musste nicht neu gemacht werden
  3. methoden können auch vorgegriffen werden, da nicht als teil des konstruktors erkannt
  4. alle überladenen konstruktoren müssen (!) auf den default verweisen, der im klassenname deklariert ist.