Open Source im professionellen Einsatz
Linux-Magazin Online Artikel/
CT, Fotolia

CT, Fotolia

Funktionale Programmierung (1): Grundzüge

Raus aus der akademischen Nische

18.09.2009

Ob Microsofts F# oder neue Features in C++, Java und Python: Der funktionale Programmierstil macht wieder Schlagzeilen. Mit diesem Online-Artikel beginnt Linux-Magazin Online eine kleine Reihe zur funktionalen Programmierung. In der ersten Folge beschreibt unser Autor Rainer Grimm die Grundzüge dieses Programmierparadigmas. Kommende Folgen widmen sich der funktionalen Programmierung in Python und dem Framework MapReduce von Google.

413

1984 zeigte John Hughes in seinem berühmten Artikel "Why Functional Programming Matters" auf, worin die Vorteile der funktionalen Programmierung liegen. Jetzt, gut 20 Jahre später, befreit sich die funktionale Programmierung aus ihrer akademischen Nische: Zum einen in funktionalen Programmiersprachen wie Erlang, Haskell und F#, zum anderen vor allem als Ideengeber für die etablierten, imperativen Programmiersprachen.

Funktionale Programmierung überall

Wenn auch nicht davon auszugehen ist, dass die funktionalen Programmiersprachen selbst in absehbarer Zeit Mainstream werden - sieht man von der Integration von F# in Visual Studio 2010 ab - so ist doch unverkennbar, dass die funktionalen Konzepte zunehmend in den imperativen Programmiersprachen Fuß fassen, sei dies in C++, Perl, Python, Ruby, Javascript oder Java.

Ein paar Beispiele sollen dies illustrieren: C++ unterstützt mit dem neuen Standard Lambda-Funktionen und Funktionen höherer Ordnung, die das Arbeiten mit der Standard Template Library deutlich einfacher gestalten. Darüber hinaus erlaubt Template Metaprogramming das Programmieren in einem rein funktionalen Subsystem. Java besitzt seit 1.5 Generics, ähnlich den Templates in C++ und wird Closures wohl mit Java 1.7 anbieten. Die Java Generics wurden von Philip Wadler entworfen, seines Zeichens der Hauptdesigner von Haskell.

In Python werden gerne funktionale Bausteine zum Programmieren verwendet, dies trifft insbesondere auf die List Comprehension zu. Mit Python 3.0 (siehe Rainer Grimm, "Im Zeichen der Drei": Linux-Magazin 09/09, S. 108) nähert sich Python der Lazy Evaluation von Haskell an, da die funktionalen Built-in-Funktionen nicht mehr Listen, sondern nur noch Generatoren zurückgeben. Aus der strikten Auswertung wird somit eine Bedarfauswertung.

Mathematisch und transparent

Was ist funktionale Programmierung? Darauf gibt es eine kurze und bündige Antwort: das Programmieren mit mathematischen Funktionen. Dies sind Funktionen, die bei gleichem Eingabewerten immer den gleichen Rückgabewert zurückliefern. Diese Zusicherung impliziert, dass der Wert einer Funktion über den ganzen Programmverlauf gleich ist, so dass der Funktionsaufruf durch den Wert der Funktion ersetzt werden kann. Ein Funktionsaufruf verhält sich wie Abfragen an eine (unendlich) große Tabelle.

Diese Eigenschaft, einen Ausdruck durch seinen Wert ersetzen zu können, ist unter dem Namen Referenzielle Transparenz bekannt.

Für ein tieferes Verständnis der funktionalen Programmierung ist es sehr hilfreich, die Charakteristiken dieses Programmierparadigmas herauszuarbeiten und mit Beispielen zu veranschaulichen. Dies genau wird das Thema dieses Artikels sein. Neben den Beispielen in der rein funktionalen Programmiersprache Haskell werden Beispiele in den imperativen Programmiersprachen C++ und Python die Prinzipien der funktionalen Programmierung aufzeigen. Zwar sind diese etablierten Programmiersprachen nicht funktional, trotzdem erlauben sie das Programmieren in einem Higher Order Style.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Haskell

    In der funktionalen Programmiersprache Haskell lässt sich bemerkenswert kompakter Code schreiben, der dennoch leicht zu lesen ist. Dieser Artikel erklärt, welche Sprachkonstrukte und -eigenschaften diese Meisterleistung ermöglichen. Eine Code-Besichtigung für Haskell-Interessierte.

  • Funktionale Programmierung (2): Python funktional

    Die meisten Entwickler verbinden Python mit dem objektorientierten Programmierstil. Doch die Sprache beschreitet vermehrt auch die Pfade der funktionalen Programmierung. Dieser Artikel zeigt, was Python in Sachen Closures, List Comprehension und Funktionen höherer Ordnung zu bieten hat.

  • Bücher

    Passend zum Haskell-Artikel in dieser Ausgabe bespricht das Linux-Magazin zwei Bücher über die funktionale Programmiersprache. Das erste ist auf Deutsch erschienen und kommt als Intensivkurs schnell zur Sache, das zweite ist englischsprachig und besticht durch seine Originalität.

  • Haskell

    Haskell ist keine Skriptsprache, sondern wird in der Regel kompiliert. Mit einigen Handgriffen lassen sich aber Shellskripte in die funktionale Sprache einbinden. Haskells starkes Typensystem greift dann ein, um Fehler durch Argumente in falscher Anzahl oder Art zu verhindern.

  • Online-Artikel: Funktionale Programmierung in Python

    Python gilt vielen als objektorientierte Sprache, doch unterstützt es auch andere Paradigmen. Rainer Grimm demonstriert in seinem kostenlosen Online-Artikel das funktionale Programmieren in Python.

comments powered by Disqus

Ausgabe 09/2016

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.