C# Was ist eine enum klasse und ein lambda =>?

2 Antworten

Ein enum ist ein spezieller Typ, der dazu dient, "magische Zahlen" durch möglichst aussagekräftige Namen zu ersetzen.

Z. B. gibt es bei Textverarbeitungen und vielen anderen Anwendungen die Möglichkeit, den Text linksbündig, rechtsbündig, zentriert oder im "Blocksatz" darzustellen. Weil Computer mit Zahlen sehr viel schneller umgehen können als mit Text, verwendet man z. B. (und üblicherweise) 0 für "linksbündig", 1 für "rechtsbündig", 2 für "zentriert" und 3 für "Blocksatz".

Wenn man jetzt in einem Programm stehen hat

        thingy.Alignment = 1;

dann ist das (in den meisten Programmiersprachen) völlig ok; aber wenn man sich den Code später anschaut und nicht mehr im Thema drin ist, fragt man sich, wofür diese 1 denn nochmal steht. Das spart man sich, wenn man stattdessen schreibt

         thingy.Alignment = System.Windows.TextAlignment.Right

Anderes Beispiel: die linke Maustaste hat die Kennzahl 1, die rechte Maustaste die Kennzahl 2 und die mittlere Maustaste (die historisch als letzte hinzukam) die Kennzahl 4. (Nicht 3, weil man dann mit einer einzigen Zahl von 0 bis 7 alle möglichen Kombinationen von gedrückten und nichtgedrückten Maustasten darstellen kann.) Auch hier kann man sich "Left", "Right" und "Middle" leichter merken. - Wobei man im Zuge der Barrierefreiheit mehr und mehr dazu übergeht, die Maustasten tauschbar zu machen und die Tasten stattdessen "Primary", "Secondary" und "Tertiary" zu nennen.

Das ginge im Prinzip natürlich auch mit einer Serie von Konstanten - vor der Einführung von enum-Typen war das auch die einzige Möglichkeit -, aber mit enum hat man etliche Vorteile, allen voran die Typsicherheit (C# nimmt kein int an, wenn ein enum-Typ gefragt ist (außer 0 aus historischen Gründen)), aber auch die Darstellung als String (C# kennt die Namen der enum-Elemente auch im Kompilat und kann sie ausgeben) und die Möglichkeit, über alle Werte eines enum zu iterieren (Schleife).

-----

lambda-Ausdrücke werden auch anonyme Funktionen genannt.

Wozu man Funktionen benötigt, wie man sie aufruft usw. solltest du wissen.

Manchmal braucht man eine Funktion aber nur an einer einzigen Stelle, und zudem ist diese Funktion noch sehr kurz - ein sogenannter Einzeiler. Dafür eine eigene Funktion anzulegen ist etwas unbequem, und um sich hier Schreibarbeit zu sparen, hat man namenlose Funktionen erfunden. Diese Funktionen werden in C# als

        (variable1, variable2, ...) => Ergebnisterm

dargestellt. (In anderen Programmiersprachen anders, in Java etwa verwendet man "->" statt "=>".)

Der Name "Lambda-Ausdruck" kommt aus der theoretischen Informatik, als man versucht hatte, ein möglichst allgemeines Konzept zu entwickeln, um alle Funktionen, die es je geben wird, darzustellen. Hierbei ging es nicht um Effizienz im Programmieren, sondern um Effizienz in der Beweisführung (Beweis im mathematischen Sinn). Der Erfinder des Konzepts hat diese Ausdrücke mit dem griechischen Buchstaben Lambda bezeichnet, und der Name ist geblieben. (Damals waren Dinge wie das Halteproblem noch nicht bekannt, sodass man noch hoffen konnte, mit einem solchen Konzept weiterzukommen als mit den bisherigen Mitteln.)

-----

Beides sind also Mittel, sich das Leben als Programmierer zu vereinfachen. Im Fall von enums sehr, sehr stark zu vereinfachen.

Woher ich das weiß:eigene Erfahrung

CuoFiji 
Fragesteller
 15.06.2022, 18:25

Danke für die Ausführliche Erklärung!

0

kurzgefasst:

enum stellt eine reihe an konstanten werten dar

enum Days {
  MONDAY, TUESDAY, WEDNESDAY //etc.
}

lambdas gehören zu delegates und delegates sind funktionen die du in variablen abspeichern kannst

Action<string> writeLn = Console.WriteLine;
writeLn("hii");
textField.OnInput(writeLn);

lambdas sind funktionsausdrücke

Action<string> strToConsole = str => Console.WriteLine($"mein string: {str}");