die auch ¨ ubergeben werden k¨ onnen (siehe λ Kalk¨ ul). Wir beschr¨ anken uns hier auf den Fall der funktionalen Programmierung in einer statisch typisierten Programmiersprache1. 1Bei uns speziell Scala. 1
haben in anderen Gefilden angefangen. • Vorprojekte in PHP, Javascript, Ruby, Python • Entwicklung unserer Suchmaschine in Java • eine Weile waren wir mit Java recht zufrieden • Beginn eines gr¨ oßeren Projektes ⇒ Geht es nicht auch besser? 2
• Wir wollten in der JVM bleiben. • FP war schon immer ein Interesse (Lisp). • Am Ende gab es dann noch Clojure und Scala. Den Ausschlag f¨ ur Scala gaben zwei Punkte: • mehr Bibliotheken (insbesondere Akka) • kein harter Umstieg (imperativ m¨ oglich) 3
gr¨ oßtenteils imperativen Code mit funktionalem ”Feenstaub” drauf. • Pattern Matching • map und flatMap • zunehmend nicht ¨ anderbare Variablen (immutable) Dies ¨ anderte sich, als wir anfingen Argonaut2 zu nutzen. • basierte auf scalaz3, ohne Kompromisse • zwang uns funktionalen Code zu schreiben 2http://argonaut.io/ 3Zu der Zeit die vorherrschende funktionale Bibliothek f¨ ur Scala. 4
• immer noch imperatives Denken im Kopf (Pr¨ agung) • h¨ oherer Einarbeitungsaufwand f¨ ur Mitarbeiter (Standardausbildung) • Angst vor Neuem bei Kunden (”Unsere Leute verstehen das nicht!”) 7
Viele Wege f¨ uhren nach Rom. (Vor- und Nachteil) • m¨ achtiges, aber komplexes Typ-System • teilweise sehr viel Boilerplate notwendig (Free, Tagless Final, Eff) • Zeit zum Compilieren steigt stark bei Nutzung fortgeschrittener Techniken. :-( 8