Scala, Objekte und Klassen

Mir ist der Unterschied zwischen Klassen und Objekten nicht klar:

Gefunden: Vergleich Java und Scala Syntax

1) Objekte sind Singletons. Was in Java eine statische Variable wäre, ist in Java eine Objektvariable. Es gibt kein Schlüsselwort „static“.

2) val == final (immutable), var == „richtige Variable“ (mutable)

3) switch case heißt „match“. Hat einen Rückgabewert (den gewählten Branch). Kann reguläre Ausdrücke enthalten.

case <body>{ b }</body> => //b is the contents

4) try catch: alle catches in einem Block, wie als switch case Anweisung. Herrlich!

5) for Schleifen mit yield Schlüsselwort:

for ( n <- 0 to 6 ; e = n%2; if e==0 ) yield n*n

Beachte auch den „<-“ Operator.

for ( x <- 0 to 4 ; y <- 0 until 3) yield (x,y)

(0,0), (0,1), (0,2) … (4,2)

6) Buch gefunden

7) Benutze Traits eher für  „adjunct behaviour“. Ein Java Interface ist eher ein „abstract class“.

(Update): ist scheinbar sehr stark Geschmackssache. Man findet andere Meinungen, in denen Traits explizit als Interfaces benutzt und bezeichnet werden. Alles einfach pragmatisch so machen, wie es einem sinnvoll erscheint. Kein Dogma möglich.

8) Bin noch nicht mit Scala und Guice zufrieden. Alles was ich bis jetzt ausprobiert habe, ist viel zu umständlich. Habe jetzt an mehreren Stellen gelesen, daß man kein seperates DI Framework braucht, sondern auch mit Scala Bordmitteln sehr gut zurecht kommt. Werde das jetzt mal versuchen.

9) (Das war eine schwierige Geburt) Guice hingekriegt: Im ServletContextListener, und nicht an den Serviceklassen, mittels @Provides Annotation die Auflösung von abstrakten (Interface-) Klasse zu konkreter Implementierung angeben. Ähnlich wie in Spring in einer extra appCtx.xml. Ich hatte mir gewünscht, daß ich nur an der implementierenden Klasse eine Annotation machen muß und Guice dann herausfindet, daß es nur eine Implementierung gibt und diese nimmt. Sie argumentieren aber, daß das zu obskur ist und man es explizit angeben muß. Das geschieht dann im ServletContextListener. Ist auch ok. Kann man bestimmt auch irgendwie noch in die web.xml auslagern …

class ServletContextListener extends GuiceServletContextListener {
 def getInjector = Guice.createInjector(new ScalateModule() {

 @Provides
 def getDataService : DataService = {
 return new DBDataService();
 }
...

10) Arrays und Collections
Eine gute Übersicht gibt es hier. Insbesondere die Auflistung von immutable und mutable Collection Typen ist hilfreich.

11) Eine POST Methode
Wie ich ein HTML Form mit scaml mache, steht hier.

Advertisements
Dieser Beitrag wurde unter Uncategorized veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Scala, Objekte und Klassen

  1. Pingback: Scala (fortgesetzt) | Daniel's Blog

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s