Was ist funktionale Programmierung?

Standard

In diesem Jahr beschäftige ich mich mit funktionaler Programmierung. Daher werde ich in den nächsten Monaten vermehrt Blogposts über dieses Thema schreiben. Dieses Mal geht es darum, was funktionale Programmierung eigentlich ist und worin es sich vom Programmierparadigma der „Mainstream“-Programmiersprachen wie C#, Java, C/C++ oder VB unterscheidet.

Unveränderliche Variablen

Prozedurale und objekt-orientierte Programmiersprachen folgen dem imperativen Programmierparadigma, das sich stark an der Von-Neumann-Architektur orientiert. Wenn das Programm ausgeführt wird, arbeitet ein Rechner die Befehle des Programms nacheinander ab. Variablen repräsentieren einen bestimmten Zustand, der sich während der Programmausführung ändern kann.

In funktionalen Sprachen sind Variablen unveränderlich. Wenn ihnen einmal ein Wert zugewiesen wurde, kann dieser nicht mehr verändert werden. Variablen sind also Namen für bestimmte Werte, während in imperativen Sprachen Variablen Namen für Speicherbereiche sind, die veränderliche Informationen beinhalten.

Unveränderliche Variablen bieten einen Vorteil bei Multithreading: Mehrere Threads teilen sich nicht den gleichen Speicherbereich, weshalb der Code für parallel verarbeitete Programme einfacher wird.

Keine Nebenwirkungen

Im Gegensatz zu imperativen Programmiersprachen ist es bei der funktionalen Programmierung üblich, dass Funktionen keine Nebenwirkungen (engl. side effect) haben. Die Typsysteme mancher funktionalen Programmiersprachen wie z.B. Haskell stellen sicher, dass Funktionen keine Nebenwirkungen aufweisen. Nebenwirkungsfreie Funktionen sind leichter testbar, weil sich der Rückgabewert nur aus den
Eingabeparametern ergibt.

Bestimmte Domänen

Funktionale Programmiersprachen bieten bei bestimmten Anwendungsfällen wie mathematische Domänen ein einfacheres Programmiermodell. Jane Street, eine Firma aus New York, die Software für die Wallstreet entwickelt, verwendet OCaml, weil sich diese funktionale Programmiersprache am besten für solche Anwendungen eignet.

Funktionale und objekt-orientierte Programmierung

Programmiersprachen wie Scala, OCaml oder F# folgen mehreren Paradigmen, wobei das funktionale Programmierparadigma im Vordergrund steht. Doch all diese Programmiersprachen sind auch objektorientiert, d.h. es können funktionale und objektorientierte Programmierparadigmen gemischt werden. Scala, eine Programmiersprache für die JVM, und F#, das .NET-Pendant, haben den Vorteil, dass sie auf bestehenden Code zugreifen können und nicht alles neu geschrieben werden muss.

Für viele Entwurfsmuster, die in der objektorientierten Programmierung verwendet werden, gibt es in der funktionalen Programmierung einfachere Lösungen. Funktionen können dort als Daten an andere Funktionen übergeben werden können, wodurch Entwurfsmuster wie Command oder Strategy durch die Übergabe von Funktionen ersetzt werden können. Ich werde auf dieses Thema in einem anderen Blogpost
eingehen.

Leave a Reply

Your email address will not be published. Required fields are marked *