Freigeben über


Konzepte und Terminologie (funktionale Transformation) (LINQ to XML)

In diesem Artikel werden die Konzepte und die Terminologie von reinen funktionalen Transformationen vorgestellt. Der Funktionale Transformationsansatz zum Transformieren von Daten liefert Code, der oft schneller zu programmieren, ausdrucksstärker und einfacher zu debuggen und zu verwalten ist als herkömmlichere, imperative Programmierung.

Beachten Sie, dass die Artikel in diesem Abschnitt nicht dazu gedacht sind, die funktionale Programmierung vollständig zu erläutern. Stattdessen identifizieren diese Artikel einige der funktionalen Programmierfunktionen, die das Transformieren von XML von einem Shape in ein anderes vereinfachen.

Was ist reine funktionale Transformation

In der reinen funktionalen Transformation definieren eine Reihe von Funktionen, die als reine Funktionen bezeichnet werden, wie eine Gruppe strukturierter Daten aus ihrer ursprünglichen Form in eine andere Form umgewandelt werden soll. Das Wort "rein" gibt an, dass die Funktionen verfasst werden können, was erfordert, dass sie:

  • Eigenständig, so dass sie frei angeordnet und umgeordnet werden können, ohne Verflechtungen oder Abhängigkeiten vom Rest des Programms. Reine Transformationen haben kein Wissen über ihre Umgebung und keinen Einfluss darauf. Das heißt, die in der Transformation verwendeten Funktionen haben keine Nebenwirkungen.
  • Zustandslos, sodass das Ausführen derselben Funktion oder eines bestimmten Satzes von Funktionen auf derselben Eingabe immer zur gleichen Ausgabe führt. Reine Transformationen haben keinen Speicher ihrer vorherigen Verwendung.

Von Bedeutung

Im rest dieses Lernprogramms wird der Begriff "reine Funktion" im allgemeinen verwendet, um einen Programmieransatz und nicht ein bestimmtes Sprachfeature anzugeben.

Beachten Sie, dass reine Funktionen als Methoden in C# und als Funktionen in Visual Basic implementiert werden müssen.

Sie sollten reine Funktionen nicht mit reinen virtuellen Methoden in C++ verwechseln. Dies gibt an, dass die enthaltende Klasse abstrakt ist und kein Methodenkörper bereitgestellt wird.

Funktionale Programmierung

Die funktionale Programmierung ist ein Programmieransatz, der die reine funktionale Transformation direkt unterstützt.

Historisch gesehen waren allgemeine funktionale Programmiersprachen wie ML, Scheme, Haskell und F# in erster Linie für die akademische Gemeinschaft von Interesse. Obwohl es immer möglich war, reine funktionale Transformationen in C# und Visual Basic zu schreiben, hat es die Schwierigkeit, dies zu tun, nicht zu einer attraktiven Option für die meisten Programmierer gemacht. In den letzten Versionen dieser Sprachen erleichtern jedoch neue Sprachkonstrukte wie Lambda-Ausdrücke und Typausschlüsse die funktionale Programmierung viel einfacher und produktiver.

Weitere Informationen zur funktionalen Programmierung finden Sie unter Funktionale Programmierung im Vergleich zur imperativen Programmierung.

Domänenspezifische funktionale Programmiersprachen

Obwohl allgemeine funktionale Programmiersprachen nicht weit verbreitet wurden, waren einige domänenspezifische funktionale Programmiersprachen besser erfolgreich. Beispielsweise werden Cascading StyleSheets (CSS) verwendet, um das Aussehen und Verhalten vieler Webseiten zu bestimmen, und XSLT-Stylesheets (Extensible Stylesheet Language Transformations) werden in der XML-Datenmanipulation umfassend verwendet. Weitere Informationen zu XSLT finden Sie unter XSLT-Transformationen.

Terminologie

In der folgenden Liste werden einige Begriffe definiert, die sich auf funktionale Transformationen beziehen.

Funktion höherer Ordnung (Funktion erster Ordnung)
Eine Funktion, die als programmgesteuertes Objekt behandelt werden kann. Beispielsweise kann eine Funktion mit höherer Reihenfolge an andere Funktionen übergeben oder von diesen zurückgegeben werden. In C# und Visual Basic sind Delegates und Lambda-Ausdrücke Sprachfeatures, die höherwertige Funktionen unterstützen. Um eine Funktion mit höherer Reihenfolge zu schreiben, deklarieren Sie ein oder mehrere Argumente, um Stellvertretungen zu übernehmen, und Sie verwenden beim Aufrufen häufig Lambda-Ausdrücke. Viele der Standardabfrageoperatoren sind Funktionen mit höherer Reihenfolge.

Weitere Informationen finden Sie unter Standard Query Operators Overview (C#) und Standard Query Operators Overview (Visual Basic).

Lambda-Ausdruck
Im Wesentlichen eine anonyme Inlinefunktion, die überall dort verwendet werden kann, wo ein Delegattyp erwartet wird. Dies ist eine vereinfachte Definition von Lambda-Ausdrücken, aber sie ist für die Zwecke dieses Lernprogramms angemessen.

Weitere Informationen finden Sie unter Lambda-Ausdrücke (C#-Programmierhandbuch) und Lambda-Ausdrücke (Visual Basic).

Auflistung
Eine strukturierte Datenmenge, in der Regel eines einheitlichen Typs. Um mit LINQ kompatibel zu sein, muss eine Sammlung die IEnumerable Schnittstelle oder die IQueryable Schnittstelle (oder eines ihrer generischen IEnumerator<T> Gegenstücke oder IQueryable<T>) implementieren.

Tupel (anonyme Typen)
Ein mathematisches Konzept, ein Tupel ist eine endliche Abfolge von Objekten, die jeweils einen bestimmten Typ aufweisen. Ein Tupel wird auch als geordnete Zusammenstellung bezeichnet. Anonyme Typen sind eine Sprachimplementierung dieses Konzepts, mit der ein unbenannter Klassentyp deklariert und ein Objekt dieses Typs gleichzeitig instanziiert werden kann.

Weitere Informationen finden Sie unter Anonyme Typen (C#-Programmierhandbuch) und anonyme Typen (Visual Basic).

Typableitung (implizite Typisierung)
Die Fähigkeit eines Compilers, den Typ einer Variablen zu bestimmen, wenn keine explizite Typdeklaration vorhanden ist.

Weitere Informationen finden Sie unter Implizit eingegebene lokale Variablen (C#-Programmierhandbuch) und lokale Typinference (Visual Basic).

verzögerte Ausführung und faule Auswertung
Die Verzögerung der Auswertung eines Ausdrucks, bis der aufgelöste Wert tatsächlich erforderlich ist. Die verzögerte Ausführung (Deferred Execution) wird in Auflistungen unterstützt.

Weitere C#-Informationen finden Sie in der Einführung in LINQ-Abfragen (C#) und verzögerte Ausführung und verzögerte Auswertung in LINQ to XML (C#).For more C# information, see Introduction to LINQ Queries (C#) and Deferred Execution and Lazy Evaluation in LINQ to XML (C#).

Weitere Informationen zu Visual Basic finden Sie unter Basic Query Operations (Visual Basic) und Verzögerte Ausführung und verzögerte Auswertung in LINQ to XML (Visual Basic).

Diese Sprachfeatures werden in Codebeispielen in diesem Abschnitt verwendet.

Siehe auch