obj.f(x) aufgerufen wird, ist erst zur Laufzeit ermittelbar. Parametrischer Polymorphismus Eine Funktion (oder Klasse) ist nicht nur über Werte, sondern auch über Typen parametrisiert. 27
obj.f(x) aufgerufen wird, ist erst zur Laufzeit ermittelbar. Parametrischer Polymorphismus Eine Funktion (oder Klasse) ist nicht nur über Werte, sondern auch über Typen parametrisiert. Ad-hoc-Polymorphismus Die Implementierung einer überladenen Methode (häufig: Operator) wird vom Compiler statisch an Hand der involvierten Typen selektiert. 27
obj.f(x) aufgerufen wird, ist erst zur Laufzeit ermittelbar. Parametrischer Polymorphismus Eine Funktion (oder Klasse) ist nicht nur über Werte, sondern auch über Typen parametrisiert. Ad-hoc-Polymorphismus Die Implementierung einer überladenen Methode (häufig: Operator) wird vom Compiler statisch an Hand der involvierten Typen selektiert. 27
String, author: User, text: T ) Vorteile ▶ Operationen interessieren sich nicht für den Text: ▶ Archivübersicht ▶ Publikation ▶ Bearbeiten von Metadaten 33
mit Typparameter weiß nichts und darf nichts Fortgeschrittenes Beispiel // Summary enthält nicht den Text public <T> Html renderSummary(BlogPost<T> post); 34
mit Typparameter weiß nichts und darf nichts Fortgeschrittenes Beispiel // Summary enthält nicht den Text public Html renderSummary(BlogPost<?> post); 34
mit Typparameter weiß nichts und darf nichts Beispiel aus der Bibliothek list.map(f).map(g) == list.map(f andThen g) list.map(f).filter(g) == list.filter(f andThen g).map(f) 34
b), c) == combine(a, combine(b, c)) trait Monoid[T] { def empty: T def combine(t1: T, t2: T): T } def mapReduce[F[_] : Foldable, A, B : Monoid] (as: F[A], f: A => B): B 48