Training
Modul
Erstellen und Entwerfen mit Funktionen in F# - Training
Erfahren Sie, was Funktionen sind und wie sie definiert und aufgerufen werden. Sie verwenden außerdem Funktionsmuster, um Architekturen mithilfe von Funktionen zu entwerfen.
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die Gemeinsamkeiten und die Unterschiede der funktionalen Programmierung und der herkömmlichen imperativen (prozeduralen) Programmierung erläutert.
Explizite Aufgabe der funktionalen Programmierung ist die Unterstützung eines reinen funktionalen Ansatzes bei der Problemlösung. Die funktionale Programmierung ist eine Form der deklarativen Programmierung. Im Unterschied dazu unterstützen die meisten normalen Programmiersprachen, darunter auch OOP-Sprachen wie C#, Visual Basic, C++ und Java, in erster Linie die imperative (prozedurale) Programmierung.
Beim imperativen Ansatz schreibt ein*e Entwickler*in Code, der die Schritte beschreibt, die der Computer zur Erfüllung der Aufgabe ausführen muss. Diese Form der Programmierung wird mitunter auch als algorithmische Programmierung bezeichnet. Beim funktionalen Ansatz hingegen wird das Problem als Satz von auszuführenden Funktionen formuliert. Sie definieren sorgfältig, was für jede Funktion eingegeben wird und was die jeweilige Funktion zurückgibt. In der folgenden Tabelle werden einige der allgemeinen Unterschiede zwischen diesen beiden Ansätzen beschrieben:
Merkmal | Imperativer Ansatz | Funktionaler Ansatz |
---|---|---|
Schwerpunkt bei der Programmierung | Art und Weise der Ausführung von Aufgaben (Algorithmen) und der Überwachung von Statusänderungen | Art der gewünschten Informationen und der erforderlichen Transformationen |
Statusänderungen | wichtig | nicht existent |
Reihenfolge der Ausführung | wichtig | weniger wichtig |
Primäre Datenflusskontrolle | Schleifen, Bedingungen und Funktions- (Methoden-)Aufrufe | Funktionsaufrufe, einschließlich Rekursion |
Primäre Manipulationseinheit | Instanzen von Strukturen oder Klassen | Funktionen als erstklassige Objekte und Datensammlungen |
Die meisten Sprachen unterstützen zwar ein bestimmtes Programmierparadigma, viele allgemeine Sprachen sind aber ausreichend flexibel, um mehrere Paradigmen zu unterstützen. So können z. B. die meisten Sprachen, die Funktionszeiger enthalten, zur glaubwürdigen Unterstützung der funktionalen Programmierung verwendet werden. Darüber hinaus enthalten C# und Visual Basic auch explizite Spracherweiterungen, darunter Lambdaausdrücke und Typableitung, die die funktionale Programmierung und Typrückschlüsse unterstützen. Eine Form der deklarativen, funktionalen Programmierung ist die LINQ-Technologie.
Viele XSLT-Entwickler sind mit dem reinen funktionalen Ansatz vertraut. Der effektivste Weg bei der Entwicklung eines XSLT-Stylesheets besteht darin, jede Vorlage als isolierte, zusammensetzbare Transformation zu behandeln. Die Reihenfolge der Ausführung ist dabei ohne jede Bedeutung. XSLT lässt keine Nebenwirkungen zu (lediglich die Escapemechanismen für die Ausführung von prozeduralem Code können Nebenwirkungen mit sich bringen, die zu funktionaler Unreinheit führen). XSLT ist zwar ein wirksames Tool, dennoch sind einige seiner Eigenschaften nicht optimal. So führt z. B. das Ausdrücken von Programmierkonstrukten in XML dazu, dass Code relativ weitschweifig und damit schwierig zu unterhalten ist. Auch die erhebliche Abhängigkeit von der Rekursion zur Flusssteuerung kann dazu führen, dass Code schwer lesbar ist. Weitere Informationen zu XSLT finden Sie unter XSLT-Transformationen.
Dennoch hat XSLT bewiesen, dass die Verwendung eines reinen funktionalen Ansatzes bei der Transformierung von XML von einer Form in eine andere sinnvoll ist. Die reine funktionale Programmierung mit LINQ to XML ähnelt in vielerlei Hinsicht XSLT. Mit den Programmierkonstrukten von LINQ to XML, C# und Visual Basic können Sie reine funktionale Transformationen schreiben, die besser lesbar und verwaltbar als XSLT sind.
Der Hauptgrund für die Implementierung von funktionalen Transformationen als reinen Funktionen (Pure-Funktionen) besteht darin, dass reine Funktionen zusammenstellbar sind, d. h., sie sind in sich abgeschlossen und zustandslos. Diese Eigenschaften bieten u. a. die folgenden Vorteile:
Aus den oben beschriebenen Gründen eignet sich die funktionale Programmierung gut für den Architekturstil von Microservices.
Bei der traditionellen objektorientierten Programmierung (OOP) verwenden die meisten Entwickler beim Programmieren den imperativen/prozeduralen Stil. Für den Umstieg auf die Entwicklung in einem reinen funktionalen Stil müssen die Entwickler umdenken und ihre Herangehensweise an die Entwicklung ändern.
Zur Lösung von Problemen entwerfen OOP-Entwickler Klassenhierarchien, konzentrieren sich auf die richtige Kapselung und denken in Klassenvertragskategorien. Im Vordergrund stehen das Verhalten und der Status von Objekttypen, und zu diesem Zweck werden Sprachfunktionen wie Klassen, Schnittstellen, Vererbung und Polymorphie bereitgestellt.
Dagegen werden die Berechnungsprobleme bei der funktionalen Programmierung als Übung für die Auswertung reiner funktionaler Transformationen von Datensammlungen angesehen. Bei der funktionalen Programmierung werden Zustands- und änderbare Daten vermieden, stattdessen steht die Anwendung von Funktionen im Mittelpunkt.
Glücklicherweise erfordern C# und Visual Basic nicht den kompletten Umstieg auf die funktionale Programmierung, da sie beide sowohl den imperativen als auch den funktionalen Programmierungsansatz unterstützen. Der Entwickler kann daher selbst entscheiden, welcher Ansatz für ein bestimmtes Szenario am geeignetsten ist. Bei vielen Programme werden beide Ansätze häufig miteinander kombiniert.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Training
Modul
Erstellen und Entwerfen mit Funktionen in F# - Training
Erfahren Sie, was Funktionen sind und wie sie definiert und aufgerufen werden. Sie verwenden außerdem Funktionsmuster, um Architekturen mithilfe von Funktionen zu entwerfen.