Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Online Artikel  »  Funktionale Programmierung (1): Grundzüge  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

CT, Fotolia

Funktionale Programmierung (1): Grundzüge

Raus aus der akademischen Nische

von Rainer Grimm
 

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.

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.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Funktionale Programmierung (3): Das MapReduce-Framework Funktionale Programmierung (3): Das MapReduce-Framework
Funktionale Programmierung (2): Python funktional Funktionale Programmierung (2): Python funktional
Bücher Bücher über die Programmiersprache Haskell
Objekterkennung Python-Skript erkennt Gesichter, Haut und Texte
Smarte Gala auf der Treppe Paketverwaltung mit Smart Package Manager
Leistungsdiagnostik Load Average enträtselt und erweitert
Whitepaper
Usage Landscape Enterprise Open Source Data Integration

Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.

Download PDF (Registrierung erforderlich)
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Kommentare (2)
von
Rainer Grimm,
25.01.2011 22:53
Re: sieve ist NICHT endrekursiv
Da haben sie natürlich recht. Ich werde den Text korrigieren lassen.
von
I. Wechsung,
23.11.2010 12:11
sieve ist NICHT endrekursiv
Die hier gezeigte Funktion sieve ist NICHT endrekursiv und wird daher auch nicht in eine Schleife umgewandelt - tatsächlich wäre es auch kontraproduktiv, eine endlose Liste in einer Schleife zu berechnen ....