Konzepte und Terminologie (funktionale Transformation) (C#)Concepts and Terminology (Functional Transformation) (C#)

Dieses Thema führt Sie in die Konzepte und Begriffe ein, die im Zusammenhang mit reinen funktionalen Transformationen verwendet werden.This topic introduces the concepts and terminology of pure functional transformations. Bei Verwendung der funktionalen Transformation zum Transformieren von Daten erhalten Sie Code, der häufig schneller programmiert werden kann, ausdrucksstärker ist und einfacher von Fehlern bereinigt und verwaltet werden kann als Code, der auf die herkömmliche imperative Methode zurückzuführen ist.The functional transformation approach to transforming data yields code that is often quicker to program, more expressive, and easier to debug and maintain than more traditional, imperative programming.

Beachten Sie, dass die Themen in diesem Abschnitt keine vollständige Erläuterung der funktionalen Programmierung darstellen.Note that the topics in this section are not intended to fully explain functional programming. In diesen Themen werden vielmehr einige der Funktionen zur funktionalen Programmierung beschrieben, die das Transformieren von XML von einer Form in eine andere erleichtern.Instead, these topics identify some of the functional programming capabilities that make it easier to transform XML from one shape to another.

Was ist die reine funktionale Transformation?What Is Pure Functional Transformation?

Bei der reinen funktionalen Transformation definiert ein Satz von Funktionen, die sogenannten reinen Funktionen, wie ein Satz strukturierter Daten aus ihrer Originalform in eine andere Form transformiert werden soll.In pure functional transformation, a set of functions, called pure functions, define how to transform a set of structured data from its original form into another form. Das Wort „rein“ bedeutet dabei, dass die Funktionen zusammensetzbar sind. Dazu müssen sie die folgenden Voraussetzungen erfüllen:The word "pure" indicates that the functions are composable, which requires that they are:

  • Sie müssen eigenständig sein, damit sie frei und ohne jede Verflechtungen oder Abhängigkeiten vom Rest des Programms geordnet und umgeordnet werden können.Self-contained, so that they can be freely ordered and rearranged without entanglement or interdependencies with the rest of the program. Reine Transformationen existieren komplett unabhängig von ihrer Umgebung und beeinflussen diese auch nicht.Pure transformations have no knowledge of or effect upon their environment. Damit haben die in der Transformation verwendeten Funktionen keinerlei Nebenwirkungen.That is, the functions used in the transformation have no side effects.

  • Sie müssen zustandslos sein, damit das Ausführen ein und derselben Funktion oder eines bestimmten Satzes von Funktionen bei ein und derselben Eingabe auch immer zur selben Ausgabe führt.Stateless, so that executing the same function or specific set of functions on the same input will always result in the same output. Reine Transformationen besitzen keine „Erinnerung“ an ihre vorherige Verwendung.Pure transformations have no memory of their prior use.

Wichtig

Im übrigen Teil dieses Lernprogramms wird der Begriff „reine Funktion“ allgemein als Bezeichnung für einen Programmieransatz und nicht als Bezeichnung für eine bestimmte Sprachfunktion verwendet.In the rest of this tutorial, the term "pure function" is used in a general sense to indicate a programming approach, and not a specific language feature.

Beachten Sie, dass reine Funktionen in C# als Methoden implementiert werden müssen.Note that pure functions must be implemented as methods in C#.

Verwechseln Sie bitte auch nicht die reinen Funktionen mit den reinen virtuellen Methoden in C++.Also, you should not confuse pure functions with pure virtual methods in C++. Die reinen virtuellen Methoden in C++ geben an, dass die enthaltene Klasse abstrakt ist und dass kein Methodentext angegeben wird.The latter indicates that the containing class is abstract and that no method body is supplied.

Funktionale ProgrammierungFunctional Programming

Die funktionale Programmierung (FP) ist ein Programmieransatz, der die reine funktionale Transformation direkt unterstützt.Functional programming is a programming approach that directly supports pure functional transformation.

In der Vergangenheit standen Allzwecksprachen zur funktionalen Programmierung, wie ML, Scheme, Haskell und F#, im Mittelpunkt des wissenschaftlichen Interesses.Historically, general-purpose functional programming languages, such as ML, Scheme, Haskell, and F#, have been primarily of interest to the academic community. Es war zwar immer möglich, in C# reine funktionale Transformationen zu schreiben, die damit verbundenen Schwierigkeiten ließen aber die meisten Programmierer davor zurückschrecken.Although it has always been possible to write pure functional transformations in C#, the difficulty of doing so has not made it an attractive option to most programmers. In neueren Versionen von C# stehen jedoch neue Sprachkonstrukte, z.B. Lambdaausdrücke und Typableitung, zur Verfügung, mit denen die funktionale Programmierung wesentlich einfacher und produktiver wurde.In recent versions of C#, however, new language constructs such as lambda expressions and type inference make it functional programming much easier and more productive.

Weitere Informationen zum funktionalen Programmieren finden Sie unter Funktionale Programmierung und Imperative Programmierung (C#)For more information about functional programming, see Functional Programming vs. Imperative Programming (C#).

Domänenspezifische FP-SprachenDomain-Specific FP Languages

Während allgemeine FP-Sprachen keine große Verbreitung gefunden haben, konnten sich bestimmte domänenspezifische FP-Sprachen durchsetzen.Although general functional programming languages have not been widely adopted, specific domain-specific functional programming languages have had better success. So wird z. B. das Aussehen vieler Internetseiten durch Cascading Style Sheets (CSS) gesteuert, während für die Bearbeitung von XML-Daten häufig XSLT-Stylesheets (Extensible Stylesheet Language Transformations) verwendet werden.For example, Cascading Style Sheets (CSS) are used to determine the look and feel of many Web pages, and Extensible Stylesheet Language Transformations (XSLT) style sheets are used extensively in XML data manipulation. Weitere Informationen zu XSLT finden Sie unter XSLT-Transformationen.For more information about XSLT, see XSLT Transformations.

TerminologieTerminology

Im Folgenden finden Sie Definitionen für eine Reihe von Begriffen, die im Zusammenhang mit der funktionalen Transformation verwendet werden:The following table defines some terms related to functional transformations.

Funktion höherer Ordnung (Funktion erster Ordnung)higher-order (first-class) function
Funktion, die als programmgesteuertes Objekt behandelt werden kann.A function that can be treated as a programmatic object. So kann eine Funktion höherer Ordnung z. B. an andere Funktionen übergeben oder von anderen Funktionen zurückgegeben werden.For example, a higher-order function can be passed to or returned from other functions. Zu den Sprachfunktionen in C#, die Funktionen höherer Ordnung unterstützen, gehören Delegate und Lambdaausdrücke.In C#c, delegates and lambda expressions are language features that support higher-order functions. Beim Schreiben einer Funktion höherer Ordnung deklarieren Sie für mindestens ein Argument, das diese Delegate akzeptiert, und beim Aufrufen einer solchen Funktion verwenden Sie häufig Lambdaausdrücke.To write a higher-order function, you declare one or more arguments to take delegates, and you often use lambda expressions when calling it. Viele der Standardabfrageoperatoren sind Funktionen höherer Ordnung.Many of the standard query operators are higher-order functions.

Weitere Informationen finden Sie unter Übersicht über Standardabfrageoperatoren (C#).For more information, see Standard Query Operators Overview (C#).

Lambdaausdrucklambda expression
Im Wesentlichen eine anonyme Inlinefunktion, die überall dort verwendet werden kann, wo ein Delegattyp erwartet wird.Essentially, an inline anonymous function that can be used wherever a delegate type is expected. Dies ist zwar eine vereinfachte Definition für Lambdaausdrücke, im Rahmen dieses Lernprogramms reicht sie aber aus.This is a simplified definition of lambda expressions, but it is adequate for the purposes of this tutorial.

Weitere Informationen dazu finden Sie unter Lambdaausdrücke.For more information about, see Lambda Expressions.

Auflistungcollection
Strukturierter Satz von Daten, die in der Regel alle denselben Typ haben.A structured set of data, usually of a uniform type. Zur Gewährleistung der Kompatibilität mit LINQ muss eine Auflistung die IEnumerable-Schnittstelle oder die IQueryable-Schnittstelle (oder eines ihrer generischen Gegenstücke, IEnumerator<T> bzw. IQueryable<T>) implementieren.To be compatible with LINQ, a collection must implement the IEnumerable interface or the IQueryable interface (or one of their generic counterparts, IEnumerator<T> or IQueryable<T>).

Tupel (anonyme Typen)tuple (anonymous types)
Begriff aus der Mathematik, der eine endliche Abfolge von Objekten bezeichnet, die jeweils einen bestimmten Typ haben.A mathematical concept, a tuple is a finite sequence of objects, each of a specific type. Ein Tupel wird auch als geordnete Zusammenstellung bezeichnet.A tuple is also known as an ordered list. Dieses Konzept ist in Programmiersprachen als anonymer Typ implementiert, der es ermöglicht, einen nicht benannten Klassentyp zu deklarieren und gleichzeitig ein Objekt desselben Typs zu instanziieren.Anonymous types are a language implementation of this concept, which enable an unnamed class type to be declared and an object of that type to be instantiated at the same time.

Weitere Informationen finden Sie unter Anonyme Klassentypen.For more information, see Anonymous Types.

Typableitung (implizite Typisierung)type inference (implicit typing)
Fähigkeit eines Compilers, den Typ einer Variablen in Abwesenheit einer expliziten Typdeklaration zu bestimmen.The ability of a compiler to determine the type of a variable in the absence of an explicit type declaration.

Weitere Informationen zu finden Sie unter Implizit typisierte lokale Variablen.For more information, see Implicitly Typed Local Variables.

Verzögerte Ausführung und verzögerte Auswertungdeferred execution and lazy evaluation
Bei der verzögerten Auswertung (Lazy Evaluation) eines Ausdrucks wird mit der Auswertung so lange gewartet, bis der aufgelöste Wert tatsächlich benötigt wird.The delaying of evaluation of an expression until its resolved value is actually required. Die verzögerte Ausführung (Deferred Execution) wird in Auflistungen unterstützt.Deferred execution is supported in collections.

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

Diese Sprachfunktionen werden in Codebeispielen im gesamten Abschnitt verwendet.These language features will be used in code samples throughout this section.

Siehe auchSee Also

Introduction to Pure Functional Transformations (C#) (Einführung in reine funktionale Transformationen (c#))Introduction to Pure Functional Transformations (C#)
Funktionale Programmierung und Imperative Programmierung (C#)Functional Programming vs. Imperative Programming (C#)