« BizSpark | Main| heise developer »

Urlaub -> Scala (6)

0
Kategorie
Nicht immer aber manchmal hat man doch die Notwendigkeit oder es würde einem das Leben erleichtern, wenn man bei einer Funktion mehrere Werte an den Aufrufenden übermitteln könnte

In Scala gibt es Tuples
Als Beispiel nehme ich meine Lieblingsklasse Derivative und erweitere diese um das Attribute dailyrevenue

case class Derivative(manufacturer : String, model : String, dailycost : Double, dailyrevenue : Double )

Danach erzeuge ich meine Liste ->

val l : List[Derivative] = List(Derivative("Mercedes","A-Klasse",10.5,12.0),Derivative("Mercedes","C-Klasse",11.5,15.0),Derivative("VW","Polo",6.0,9.0),Derivative("VW","Golf",9.5,12.0))

und jetzt möchte ich eine Funktion schreiben, welche mir die Anzahl der Elemente in der Liste, sowie die Summen über dailycost und dailyrevenue zurückgibt.

Diese sieht dann ungefähr so aus ->

def sumCostRevenue( in : List[Derivative] ) = in.foldLeft((0,0d,0d))((t,v) => (t._1+1, t._2 + v.dailycost, t._3 + v.dailyrevenue))

mittels ->
var s = sumCostRevenue(l)
println("avarage cost : " + s._2 / s._1)
println("average revenue : " + s._3 / s._1)

Kann ich die Mittelwerte aufrufen. foldLeft hatte ich schon mal erklärt? Na ja, geht also mit einem Startwert vom Anfang bis an das Ende der Liste nimmt den Start t und das aktuelle Element v und führt die definierte Funktion aus, das Resultat kommt beim nächsten Aufruf in t. War doch verständlich, oder?

OK, gebe zu, dass die Funktion sumCostRevenue evtl. ein wenig schwer zu lesen ist, wer es einfacher liebt, könnte, mittels Pattern-Matching, den Code wie folgt umschreiben

def sumCostRevenueReadable( in : List[Derivative] ) = in.foldLeft((0,0d,0d)){ case ((count,sumcost,sumrevenue),derivative) => (count + 1, sumcost + derivative.dailycost, sumrevenue + derivative.dailyrevenue) }

Gruß JJR
P.S.: Falls Ihr mal ein Scala-Projekt macht, bitte Bescheid sagen, würde mich einfach interessieren

Mach einen Kommentar

:-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