Urlaub -> Scala (6)
Scala
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
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
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