« SOA und wie es dazu kam!! | Main| Software generieren mit T-SQL (2) »

Urlaub -> Scala (3)

9
Category
Heute beschäftige ich mich mit case classes.
Also Klassen die Käse sind?

Hier eine case class -> case class Derivative(manufacturer : String, model : String, count : Int)

OK, und was kann man damit machen?
Erstes Beispiel:
case class Derivative(manufacturer : String, model : String, count : Int)

val s = Derivative("Mercedes","S-Klasse",45)

println(s)

OK und wie sieht dann der output aus, wie in Java like object bla bla ????
Nein -> Derivative(Mercedes,S-Klasse,45)
Upps, ich brauche bei case classes keine ToString-Methode mehr zu implementieren genauso keine hashCode nd equals

OK, jetzt hängen wir an das Script folgendes an ->
def mercedes(x : Derivative) = {
        x match {
                case Derivative("Mercedes","S-Klasse",_) => "Mercedes S-Klasse"
                case Derivative("Mercedes",_,_) =>  "Only Mercedes"
                case Derivative(_,_,45) => "45 units"                
                case _ => "not defined"
        }
}

println(mercedes(Derivative("Mercedes","S-Klasse",1)))
println(mercedes(Derivative("VW","Polo",45)))
println(mercedes(Derivative("Mercedes","Vito",45)))

Und schon sind wir im Basic Pattern Matching Output ->
Mercedes S-Klasse
45 units
Only Mercedes

wenn man die Zeilen
case Derivative("Mercedes",_,_) =>  "Only Mercedes"
case Derivative(_,_,45) => "45 units"        
tauscht sieht der Output wie folgt aus:
Mercedes S-Klasse
45 units
45 units

Jetzt noch
"Only Mercedes" durch
{ println("MB"); "Only Mercedes" }
ersetzen und dann schaue ich weiter fernsehen.

Gruß JJR

Comments

Gravatar Image1 - Hallo Jörg,

interessante Sache mit diesen "case-classes". Ist also praktisch so eine Art zur Laufzeit über den Konstruktor frei parametrisierbare Klasse deren Parameter später wieder entsprechend ausgewertet werden können, richtig?

Mir fällt zwar gerade kein konkreter Anwendungsfall dafür ein, aber die Tatsache dass man die case-Parameter anscheinend zur Laufzeit wie Properties frei setzen kann und auch diverse Methoden gleich mit generiert werden ist schon nicht übel Emoticon

Viele Grüße,
Sebastian

Gravatar Image2 - Hallo Sebastian,

mir fallen da schon ein paar Sachen ein... z.B. habe ich eine zweite case class definiert ->
case class Model(manufacturer : String, model : String)

Bei der mercedes Methode habe ich den Parameter auf den Typ Any gesetzt und ein weiteres case im Pattern-Matching eingefügt:

def mercedes(x : Any) = {
x match {
case Derivative("Mercedes","S-Klasse",_) => "Mercedes S-Klasse"
case Derivative("Mercedes",_,_) => { println("MB"); "Only Mercedes" }
case Derivative(_,_,45) => "45 units"
case Model(vManufacturer,vModel) => "Model -> " + vManufacturer + "/" + vModel
case _ => "not defined"
}
}


Danach konnte ich sofort -> folgendes machen ->
println(mercedes(Model("VW","Jetta")))

Das heißt bei sehr dynamischen Zuordnungsalgorithmen müßte ich mir keine Gedanken mehr um Vererbung, Interfaces und den ganzen Mist machen. Ich könnte bei einer neuen Anforderung einfach eine neue Klasse machen und die Zuordungslogik einfach über ein weiteres Pattern-Matching erweitern Emoticon

Nehme auch mal an, dass ich die case class mit eigenen Methoden erweiteren kann, muß ich aber noch schauen Emoticon

Gruß JJR


Gravatar Image3 - Hallo Sebastian,

der Inline-Constructor funktioniert zumindest, also wird der Rest auch gehen Emoticon

case class Derivative(manufacturer : String, model : String, count : Int) { println("constructor") }

Gruß JJR

Post A Comment

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)

Amazon


Impressum

Firmenname: Peanuts-Soft
Straße Nummer: Biinger Strasse 8
PLZ Ort: 55263 Wackernheim
Telefon: +491772134526
E-Mail: joerg.reck @ peanuts-soft.de
Disclaimer: Peanuts-Soft übernimmt keine Garantie dafür, dass die auf dieser Website bereitgestellten Informationen vollständig, richtig und stets aktuell sind. Dies gilt auch für alle Links, auf die verwiesen wird. Peanuts-Soft ist für die Inhalte, auf die per Link verwiesen wird, nicht verantwortlich. Peanuts-Soft haftet nicht für konkrete, mittelbare und unmittelbare Schäden oder Schäden, die durch fehlende Nutzungsmöglichkeiten, Datenverluste oder entgangene Gewinne – sei es aufgrund der Nichteinhaltung vertraglicher Verpflichtungen, durch Fahrlässigkeit oder eine andere unerlaubte Handlung – im Zusammenhang mit der Nutzung von Dokumenten oder Informationen bzw. der Erbringung von Dienstleistungen entstehen, die auf dieser Web Site zugänglich sind.
Datenschutz: Inhalt und Gestaltung der Internetseiten sind urheberrechtlich geschützt. Eine Vervielfältigung der Seiten oder deren Inhalte bedarf der vorherigen schriftlichen Zustimmung von Peanuts-Soft.


Locations of visitors to this page

Powered By

Domino BlogSphere
Version 3.0.2