Scala Was gibt s Neues?

Ähnliche Dokumente
Scala. Funktionale (Zustandslose) Objekte

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Mocking Libraries Shootout

Programmieren in Java

Scala: Klassen, Methoden und Objekte. von Simon Lerch

Grundelemente objektorientierter Sprachen (1)

Generisches Programmieren. Generisches Programmieren

Grundelemente objektorientierter Sprachen (1)

1 Einleitung Generizität Syntax... 2

Methoden und Wrapperklassen

Grundlagen der Informatik 0

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Kopieren und Vergleichen

ADT: Java Collections und ArrayList

Kopieren und Vergleichen

OCP Java SE 8. Lambda

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Vorkurs Informatik WiSe 16/17

OCP Java SE 8. Lambda

Java I Vorlesung 6 Referenz-Datentypen

Einstieg in die Informatik mit Java

Programmieren in Java

Erste Java-Programme (Java Wiederholung & Vererbung)

Einstieg in die Informatik mit Java

IT I: Heute. Nachbetrachtung Wissensüberprüfung. Einführung Vererbung. Roboter in becker.robots. Filialenbelieferung 4.11.

Methoden. (Softwareentwicklung II (IB)) Prof. Dr. Oliver Braun. Letzte Änderung: :40. Methoden 1/44

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Programmierparadigmen und Sprachen

Vererbung und Polymorphie

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Einstieg in die Informatik mit Java

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Grundelemente objektorientierter Sprachen (1)

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

string: Beispiele: Test, test, `Seitentitel: ${document.title}`

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Einführung in C. EDV1-04C-Einführung 1

Informatik II. Woche 15, Giuseppe Accaputo

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Softwareentwicklung II (IB) Methoden. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Objektorientierte Programmierung. Kapitel 19: Wrapper-Klassen

Informatik II Übung 6

Programmieren in C++ Templates

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Abschnitt 10: Typisierte Klassen

Praxis der Programmierung

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Informatik II Übung 06. Benjamin Hepp 5 April 2017

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Einstieg in die Informatik mit Java

Vorkurs Informatik WiSe 17/18

Informatik II. Woche 10, Giuseppe Accaputo

Programmiertechnik Erweiterungen in Java 5

Scala. Abstrakte Elemente. Jevgeni Zelenkov. HM

Klassen als Datenstrukturen

Grundlagen der OO- Programmierung in C#

Programmierkurs Java

Hüllklassen. Gerd Bohlender. 25. Juni Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Methoden und Funktionen in Scala

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Programmieren in Java

II.4.4 Exceptions - 1 -

Objektorientierte Programmierung

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Web-Techniken Einführung in JavaScript

Das Interface-Konzept am Beispiel der Sprache Java

Programmieren in Java

Software Entwicklung 1

Java Datentypen und Variablen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Software Entwicklung 1

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Computeranwendung und Programmierung (CuP)

Java I Vorlesung Generics und Packages

Programmiertechnik Klassenvariablen & Instantiierung

Brückenkurs Programmieren

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots IT I - VO 5 1

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Vererbung, Polymorphie

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 4 ArrayList, PriorityQueue, HashSet und HashMap

Einstieg in die Informatik mit Java

Inhaltsverzeichnis 1 Der objektorientierte Ansatz 2 Elementare Objekte und Ausdrücke

Transkript:

Java Forum Stuttgart 1 Prof. Dr. Oliver Braun o.braun@fh-sm.de Fakultät Informatik Fachhochschule Schmalkalden 01. Juli 2010

Java Forum Stuttgart 2 Überblick ursprünglich nur Collections neu schreiben 18 Monate Entwicklungszeit parallel viele andere Erneuerungen bessere IDE-Unterstützung neue Tools: scalap, scaladoc2 Typ-Inferenz für Typ-Konstruktoren verbesserte Actors Unterstützung für Continuations... Martin Odersky auf den Scala Days 2010 (sinngemäß): es wäre eigentlich 3.0 angebracht aber 2.8 ist schon announced und wird bereits in Büchern etc. referenziert

Java Forum Stuttgart 3 Inhalt Named Arguments Default Arguments Scala 2.8 Collections Package-Objekte Arrays in Scala 2.8 Typ-Spezialisierung Nested Packages Scaladoc 2 Scala IDE for Eclipse

Java Forum Stuttgart 4 Named Arguments Parameter in Funktionsdefinitionen haben Namen, z.b. def f ( a : I n t, b : Boolean ) = i f ( b ) a e l s e 0 diese Namen können ab Scala 2.8.0 nicht nur innerhalb der Funktion, sondern auch beim Aufruf der Funktion in der Parameterliste genutzt werden, z.b. f ( a = 7, b = f a l s e ) f ( b = true, a = 12) f (18, b = true )

Java Forum Stuttgart 5 Named Arguments (2) nicht erlaubt f ( b = true, 1) // error: positional after named argument f ( true, a = 2) // error: parameter specified twice: a (fast) keine Verwechslung mit Zuweisungen möglich var a = 5 f ( a = a + 1, b = f a l s e ) // named argument eine Zuweisung der Form a = a + 1 hat den Typ Unit bei by-name-argumenten mit dem Ergebnistyp Unit kann es Probleme geben Compiler-Error

Java Forum Stuttgart 6 Default Arguments bei der Definition einer Funktion können Default Arguments angegeben werden, z.b. def f ( a : I n t, b : Boolean = true ) = i f ( b ) a e l s e 0 damit kann das Argument beim Aufruf weg gelassen werden f ( 7 ) f ( a = 12)

Java Forum Stuttgart 7 Default Arguments (2) Named und Default Arguments zusammen machen einfache Überladung obsolet c l a s s R a t i o n a l ( v a l numer : I n t = 0, v a l denom : I n t = 1) 4 Konstruktoren new R a t i o n a l ( ) // 0 1 new R a t i o n a l ( 2 ) // 2 1 new R a t i o n a l ( denom = 2) // 0 2 new R a t i o n a l ( 5, 3 ) // 5 3

Java Forum Stuttgart 8 Default Arguments (3) Achtung: Default Arguments ersetzen nicht die Implementierung überladener Methoden Beispiel: t r a i t MyTrait { def f ( i : I n t ) : Double def f ( i : I n t, d : Double ) : Double } c l a s s MyClass extends MyTrait { // e r r o r def f ( i : I n t, d : Double = 1) = i d } führt zu error: class MyClass needs to be abstract, since method f in trait MyTrait of type (i: Int)Double is not defined

Java Forum Stuttgart 9 copy-methode für Case-Klassen Für Case-Klassen wird copy-methode dank Named und Default Arguments automatisch generiert. Beispiel: case c l a s s C o n f e r e n c e ( name : S t r i n g, y e a r : I n t ) v a l j f s 2 0 1 0 = C o n f e r e n c e ( Java Forum S t u t t g a r t, 2010) v a l j f s 2 0 1 1 = j f s 2 0 1 0 copy ( y e a r = 2011) // Conference(Java Forum Stuttgart,2011)

Java Forum Stuttgart 10 Scala 2.8 Collections mit 2.8.0 Redesign der Scala-Collections-Bibliothek alle Collection-Klassen sind in scala.collection die meisten Basis-Klassen 1 existieren in 3 Formen 1 in scala.collection.immutable 2 in scala.collection.mutable 3 in scala.collection einzige Ausnahme ist Buffer-Trait (immer mutable) die Klassen in scala.collection haben das selbe Interface wie die entsprechende in scala.collection.immutable... sind aber nicht garantiert unveränderbar die Klassen in scala.collection.mutable haben zusätzlich noch Methoden die den Zustand verändern können 1 siehe nächste Folie

Java Forum Stuttgart 11 Die wichtigsten Collection-Basisklassen Traversable Iterable +---------------+-------------------+ Map Set Seq +--------+ +-------+---------+ SortedMap SortedSet BitSet Buffer Vector LinearSeq

Java Forum Stuttgart 12 Erzeugen einer Instanz... durch Angabe des Klassennamens und der Elemente in Klammern, z.b. T r a v e r s a b l e ( 1, 2, 3) Map( B > B e r l i n, S > S t u t t g a r t ) Set ( Java, Forum, S t u t t g a r t ) genauso für spezifische Implementierungen L i s t ( 1, 2, 3) HashMap (1 > one, 2 > two ) Repräsentation als Zeichenkette mit tostring auf die gleiche Weise

Java Forum Stuttgart 13 Seq Sequenzen sind partielle Funktionen von Int zu dem Elementtyp, beginnend bei 0 Sequenzen definieren eine Methode apply 2 zum Indizieren Beispiel v a l l i s t = L i s t ( H a l l o, Welt ) l i s t ( 1 ) // Welt 2 Ein Ausdruck der Form <objectname>(<parameterlist>) wird in Scala immer expandiert zu <objectname>.apply(<parameterlist>)

Java Forum Stuttgart 14 Set apply ist identisch zur contains-methode, d.h. v a l s e t = Set ( 1, 2, 3 ) s e t ( 2 ) // true, entspricht set.contains(2) s e t ( 4 ) // false, entspricht set.contains(4) Elemente hinzufügen oder entfernen immutable: Set(1,2) + 3 und Set(1,2) - 2 mutable: set += 3 und set -= 2 Argumentliste mit mehreren Argumenten v a l s e t 2 = s e t ( 3, 2 ) // Set(1) Mengenoperationen wie Vereinigung (union, ), Schnitt (intersect, &), Mengendifferenz (diff, &~)

Java Forum Stuttgart 15 Map apply gibt Wert zurück oder wirft Exception map( key ) // value oder Exception Lookup-Methode get nutzt den Option-Datentyp 3 def get ( key ) : Option [ Value ] im Wesentlichen gleiche Methoden wie Set: +, -, +=, -=,... 3 Option[A] hat die beiden Werte None und Some(x) für ein x: A

Java Forum Stuttgart 16 Map (2) Updates mit verschiedener Syntax möglich 4 map ( 5 ) = f i v e map. update ( 5, f i v e ) map += (5 > f i v e ) für immutable Maps map. updated ( 5, f i v e ) map + (5 > f i v e ) 4 Ein Ausdruck der Form <objectname>(<parameterlist>) = <expression> wird in Scala immer expandiert zu <objectname>.update(<parameterlist>, <expression>)

Java Forum Stuttgart 17 Migration zu neuen Collection-Klassen die in Scala 2.8.0 neu eingeführten Package-Objekte erleichtern Migration package object s c a l a { type L i s t [+A] = s c a l a. c o l l e c t i o n. immutable. L i s t [A] v a l L i s t = s c a l a. c o l l e c t i o n. immutable. L i s t //... } das Scala-Package-Objekt muss in scala/package.scala gespeichert werden die dort definierten Member sind dann Teil des Packages damit gibt es neben scala.collection.immutable.list auch scala.list

Java Forum Stuttgart 18 Arrays in Scala Spannungsfeld Interoperabilität mit Java / Effizienz von Java-Arrays vs. die Vielzahl von Methoden der Scala-Collections soll auch mit Arrays nutzbar sein Scala bis 2.7.x nutzt Boxing / Unboxing / Compiler Magic Probleme und zum Teil schlechte Performanz auf Scala-Arrays konnten zwar viele Collection-Methoden angewendet werden, aber das Ergebnis war kein Array mehr gleiches Problem mit String und RichString

Java Forum Stuttgart 19 Scala 2.8 Arrays entsprechen Java Arrays implizite Umwandlung in ArrayOps für die Collection-Methoden geben Arrays zurück moderen VMs können die impliziten Konversionen eliminieren Overhead nahe Null zweite implizite Umwandlung in echte Seq: WrappedArray Auswahl von überladenen Methoden und Implicits in 2.8.0 liberalisiert: Priorisierung von Implicits Analog: StringOps und WrappedString

Java Forum Stuttgart 20 Generische Arrays Java erlaubt keine Typparameter im Zusammenhang mit Arrays Scala erlaubt aber beispielsweise new Array [T] // für T ist Typparameter benötigt Runtime-Information über T Mechanismus heisst Manifest Manifest[T] kann für bekannte Typen vom Compiler generiert werden und wird als impliziter Parameter übergeben abgeschwächte Version ClassManifest kann erzeugt werden wenn nur Top-Level-Klasse eines Typen bekannt ist (reicht für Arrays)

Java Forum Stuttgart 21 Generische Arrays (2) Beispiel def l i s t T o A r r a y [T ] ( l i s t : L i s t [T ] ) ( i m p l i c i t m: C l a s s M a n i f e s t [T ] ) = { v a l xs = new Array [T ] ( l i s t. l e n g t h ) f o r ( i < 0 u n t i l l i s t. l e n g t h ) xs ( i ) = l i s t ( i ) xs } kürzer mit Context Bound def l i s t T o A r r a y [T: C l a s s M a n i f e s t ] ( l i s t : L i s t [T ] ) = { //...

Java Forum Stuttgart 22 Generische Arrays (3) Funktion die listtoarray nutzt und selbst Typparameter hat muss auch Manifest bieten: def mkarray [T: C l a s s M a n i f e s t ] ( x : T ) = l i s t T o A r r a y ( x. t o L i s t ) GenericArray ist immer Java-Referenz-Array und braucht daher kein Manifest

Java Forum Stuttgart 23 Typ-Spezialisierung Scalas parametrischer Polymorphismus basiert auf Type Erasure für primitive Typen heisst das Un-/Boxing Unit, Boolean, Byte, Short, Char, Int, Long, Float, Double ca. 10 mal langsamer Programmierer nehmen keine generischen Collections

Java Forum Stuttgart 24 Typ-Spezialisierung (2) Ausweg: Type Specialization in Scala 2.8 c l a s s Vector [@s p e c i a l i z e d A] { def a p p l y ( i : I n t ) : A = //... def map [@s p e c i a l i z e d ( I n t, Boolean ) B] ( f : A => B) = //... } Compiler erzeugt generische Klasse Vector und spezialisierte für jeden primitiven Typ map wird für Int und Boolean spezialisiert

Java Forum Stuttgart 25 Nested Packages Java hat nur absolute Packages, in Scala können Packages verschachtelt werden Pre-2.8: package net. obraun import j a v a. u t i l. Scanner schlägt fehl, wenn es ein Sub-Package net.java gibt 2.8: package net. obraun sucht nicht in net package package net obraun sucht in net

Java Forum Stuttgart 26 Neues Scaladoc moderneres Layout Tags, wie in Javadoc @author @param @return... Wiki-Syntax in Sourcecode- Kommentaren Makros @define <name> <body> nutzbar als $name

Java Forum Stuttgart 27 Eclipse-Plugin gemischte Scala/Java-Projekte Syntax Highlighting Code-Completion Hyperlinks zu Definitionen Error Markers Debugging...

Java Forum Stuttgart 28 Vielen Dank für die Aufmerksamkeit Fragen? 02.12.2010 Die Sprache Scala Die Tools Interpreter / Compiler... Simple Build Tool ScalaDoc / ScalaCheck / ScalaTest /... Die Frameworks Lift Akka...