Für das gesamte vergangene Jahr habe ich Scala- Code geschrieben (mit Java-Hintergrund). Es hat mir sehr gut gefallen, wie Sie einfacheren und saubereren Code mit Vals, Case-Klassen, Map / Filter / Lambda-Funktionen, Implicits und der Typinferenz erstellen können. Ich habe es hauptsächlich für eine Akka- basierte Anwendung verwendet.
Dieses Jahr bin ich in einem Scala-Projekt mit einem neuen Team, das funktionale Programmierung wirklich mag. Sie verwenden häufig Scalaz , und der Code ist überall mit Anwendern, Kontextgrenzen, Lese- / Schreib- / Statusmonaden gefüllt, selbst die Hauptmethode ist in eine E / A-Monade "eingepackt". Ihre Argumentation ist, dass dies den Compiler dazu bringt, "für uns zu arbeiten", zu behaupten, dass der Code korrekt ist und jede Funktion frei von Nebenwirkungen ist.
Trotzdem steht aus meiner Sicht all diese Syntax der Geschäftslogik im Weg. Ein Typ von "MyBusinessObject" ist beispielsweise in Ordnung, ebenso wie Typen wie "List [MyBusinessObject]", "Option [MyBusinessObject]" oder sogar "Future [MyBusinessObject]". Sie alle haben eine klare Bedeutung und einen klaren Zweck. Auf der anderen Seite Code wie:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
Fügt es dem Programm Komplexität hinzu, oder bin ich nur an diese Art der Programmierung nicht gewöhnt?
>>=
und <$>
, die bis auf Sie nichts bedeuten wissen was sie tun. Nachdem sie gelernt haben, was sie bedeuten, lesen sie mir jetzt ganz natürlich und schnell vor. Keine wirkliche Antwort, nur meine objektive Erfahrung mit solchen Dingen. Ich benutze auch Scala, habe aber keine Erfahrung mit der Scalaz-Bibliothek.
for(i=0; i<7; ++i) { trivialOperation(i); }
mit einer umständlichen trivialOperationCount
Variablen schreiben , oder?). In funktionalen Programmiersprachen mit Pattern Matching werden manchmal weitere Variablen eingeführt schreibe einfach Accessor Methodenaufrufe in OO aus. Das Ergebnis ist im Allgemeinen prägnanter. Vielleicht ein bisschen weniger selbsterklärend, aber das Nachschlagen der Datendeklaration macht es normalerweise schnell klar. Statische Eingabe hilft sehr, es ist nicht wie in APL.