i

Warum funktional programmieren?

Was bedeutet "funktionale Programmierung"?

Eine einheitliche Definition was man unter funktionaler Programmierung versteht, gibt es nicht. Inzwischen bieten viele Programmiersprachen die Möglichkeit einzelne Aspekte der funktionalen Programmierung umzusetzen. Um die Vorzüge der funktionalen Programmierung zu erleben, ist es aber von Vorteil eine Sprache zu nutzen, die das funktionale Programmierparadigma sehr sauber umsetzt. Eine dieser Sprachen ist Elm.

Merkmale rein funktionaler Programmiersprachen - wie z.B. Elm - sind:

  • Programme werden mit Hilfe von Funktionen im mathematischen Sinne gebildet. Eine Funktion kann Werte übergeben bekommen und hat immer ein Ergebnis, das sie zurückliefert.
  • Funktionen haben keine Seiteneffekte. Das bedeutet, dass eine Funktion keine Auswirkungen hat, außer dass sie eine Rückgabe bewirkt. Rein funktionale Sprachen erlauben damit noch nicht einmal eine Bildschirmausgabe. Wie man dennoch Ausgaben in Elm erreichen kann, obwohl Elm eine rein funktionale Sprache ist, lernst du im Abschnitt über dynamische Webseiten.
  • Funktionen sind deterministisch. Bei gleichen Parametern, die an eine Funktion übergeben werden, muss eine Funktion die gleiche Rückgabe liefern. Somit sind die Erzeugung von Zufallszahlen oder Benutzereingaben innerhalb von Funktionen nicht erlaubt.
  • Funktionen gelten als Bürger erster Klasse. Man kann Funktionen also wie andere Werte auch als Parameter übergeben oder von einer Funktion als Rückgabe erhalten. Gemeint ist hier nicht der Funktswert z.B. der Funktion f(x) = 3x für z.B. x=2, sondern die Funktion f an sich. Das klingt sehr abstrakt, wird aber in den späteren Abschnitten anschaulicher.

Vorteile durch Beschränkung

Das alles klingt nach deutlichen Einschränkungen gegenüber anderen Sprachen und in der Tat ist das auch der Fall. Der Verzicht bringt aber Vorteile, die typisch für funktionale Sprachen sind:

  • Einige Fehler, die in anderen Sprachen logische Fehler oder Laufzeitfehler wären, werden in Elm zu syntaktischen Fehlern. Das ist ein riesiger Vorteil, da der Compiler uns diese Fehler während der Entwicklung melden kann, während logische Fehler und Laufzeitfehler eventuell unentdeckt bleiben und dann beim Benutzer auftreten. (siehe Fehler in Programmen )
  • Die Testbarkeit funktionaler Programme ist erleichtert. Da das Ergebnis einer Funktion nur von den Parametern und nicht von internen oder externen Zuständen oder Ereignissen (z.B. Zufallszahlen oder Benutzereingaben) abhängt, kann man leichter Testfälle formulieren, die alle Eventualitäten abdecken.
  • Da Funktionen keine Seiteneffekte haben, also z.B. nicht auf Dateiinhalte zugreifen, gibt es keine Probleme, wenn mehrere Funktionen gleichzeitig parallel ausgeführt werden. Funktionale Programme sind somit leichter parallelisierbar.
  • Die Beschränkung auf Seiteneffekt-freie und deterministische Funktionen erzwingt einen guten Programmierstil. Selbst wenn du später nie mehr in Elm programmieren solltest, wird dir die Beschäftigung damit einen besseren Programmierstil bringen. Viele der Dinge, die du in Elm beachten musst, gelten auch in anderen Sprachen als guter Stil.

Suche

v
8.2.1.1
dev.inf-schule.de/deklarativ/fp_elm/vorwort/warumfunktional
dev.inf-schule.de/8.2.1.1
dev.inf-schule.de/@/page/MihTIGBWamx4ZmRg

Rückmeldung geben