Funktionale-Sprachen

10/21/2015 22:04 Mysthik#1
Moin,

mich würde mal interessieren was ihr von Funktionalen-Sprachen haltet und insbesondere deren Verwendung in größeren Projekten.
Ich vermute mal, dass die die Informatik oder ähnliches studieren schon darüber gestolpert sind oder gibt es unter euch welche die sich freiwillig eine rein funktionale Sprache angeschaut haben?
Mit welcher Sprache habt ihr Erfahrung und lohnt es sich die Sprache anzugucken?

Ich hatte ein Semester [Only registered and activated users can see links. Click Here To Register...] und hab danach in anderen Sprachen (insbesondere Java) viele Konzepte der Funktionalenprogrammierung vermisst (Angefangen bei den fehlenden Seiteneffekten bis hinzu den first class citizens functions, Typisierung, lazy evaluation,...).

Wer noch keine Erfahrung mit einer funktionalen Sprache hat dem kann ich nur empfehlen sich mal eine anzugucken (am besten eine rein Funktionale). Wer gerne Java programmiert sollte sich mal [Only registered and activated users can see links. Click Here To Register...] angucken sobald man einmal mit Scala angefangen hat will man nicht mehr zurück zu Java (auch wenn dies keine rein Funktionale Sprache ist, sondern das beste aus beiden Paradigmen vereint :)).
10/21/2015 22:22 MrDami123#2
In Python programmiere ich primär funktional. Wobei ist es funktionale Programmierung, wenn man in den Funktionen Klassen aus anderen Bibliotheken verwendet?

Erst bei größeren Projekten schreib ich lieber Klassen, die ich wiederum in Funktionen verwende.
10/21/2015 22:31 NotEnoughForYou#3
Habe 1 Semester lang den Scheme-Dialekt Racket gemacht und 1 Semester Haskell, wobei mir Haskell besser gefallen hat. Prinzipiell gefällt mir die Art zu programmieren, besonders die Möglichkeit Haskell "Programme" auch in anderen Sprachen (z.B. C) benutzen zu können. Dennoch setze ich bei größeren Projekten auf objektorientierte Sprachen.
10/21/2015 23:37 Shadow992#4
Ich weiß nicht ob ich mich damals wie heute einfach nur erfolgreich genug gesträubt habe gegen 100% funktionale Programmierung, aber was hindert mich daran "auf Java Art und Weise" funktional zu programmieren?
Ich kann dort doch auch Seiteneffektfreie und leicht parellisierbare Funktionen schreiben?
Lazy Evaluation geht an sich natürlich nicht einfach so. Aber besonders wenn es um Geschwindigkeit zu einem bestimmten Punkt X geht, ist es wichtig einschätzen zu können wie lange das Programm dafür braucht. Wenn ich jetzt aber lazy evaluation reinhau, kann ich nicht einmal grob abschätzen, wie lange Punkt X braucht, weil ich nicht weiß, ob nicht irgendwelche alten Werte erst berechnet werden müssen.

Also hat bestimmt alles seine Vor- und Nachteile und ist sicher auch Geschmackssache.
Eine Sache lässt sich leider nicht klein reden, was ich für das ausschlaggebende Argument halte, dass funktionale Programmierung nur partiell angewandt wird und auch nur dort wo es sich wirklich enorm anbietet:

Menschen denken nun einmal 90% der Zeit in Objekten (auch wenn man das am Anfang der OOP nicht wirklich versteht/glaubt). Das heißt den Überblick zu behalten bei einem OOP Projekt ist um einiges leichter (und dennoch schwer genug) als den Überblick über ein rein funktionales Programm zu haben.

Deswegen wird das Ganze funktionale Zeugs meiner Meinung nach auch nur selten industriell eingesetzt, dafür aber umso öfter im akademischen und Forschungsbereich.
10/22/2015 18:18 Mysthik#5
Quote:
Originally Posted by Shadow992 View Post
Ich weiß nicht ob ich mich damals wie heute einfach nur erfolgreich genug gesträubt habe gegen 100% funktionale Programmierung, aber
Kann ich gut verstehen, ich hab immer noch Probleme mit der unnötigen komplexität die eine einfache Funktion bekommen kann, wenn man diese rein Funktional löst. Auch das debuggen, gerade von rekursiven Funktionen ist schrecklich und die Konstrukte werden sehr schnell unübersichtlich. Das sind unteranderem die Gründe, warum ich meist Scala verwende.

Quote:
Originally Posted by Shadow992 View Post
was hindert mich daran "auf Java Art und Weise" funktional zu programmieren?
Ich kann dort doch auch Seiteneffektfreie und leicht parellisierbare Funktionen schreiben?
Sicherlich ist es möglich in anderen Sprachen nur mit Funktionen zu arbeiten aber diese besitzen vielfach einige Konstrukte nicht die funktionale Sprachen mit sich bringen. Java unterstützt zum Beispiel keine Funktionen höherer Ordnung (nur umständlich über z.B. Interfaces). In den Objekt-Orientierten Hochsprachen die ich bis jetzt verwendet hab gab es so gut wie nie ein vernünftiges Pattern-Matching für Datentypen die meisten funktionalen Sprachen bieten sowas und es ist deutlich angenehmer damit zu arbeiten, insbesondere bei rekursiven Funktionen auf Listen.

Quote:
Originally Posted by Shadow992 View Post
Also hat bestimmt alles seine Vor- und Nachteile und ist sicher auch Geschmackssache.
Das stimmt wohl :).