x wechselt x Mal zu x
Dienstag, 21.9.2010, 11:21 > daMaxEs gibt in letzter Zeit immer häufiger Momente, in denen mich das Gefühl beschleicht, den falschen Beruf ergriffen zu haben. Moderne Computersprachen warten mit immer komplexeren Konstrukten auf, die mein kleines Affenhirn nicht versteht. Auch die dazugehörigen "Erklärungen" lassen mich dreinblicken wie der berühmte Ochs vorm Berg.
Irgendwo in den Tiefen unseres aktuellen Projekts findet sich diese Codezeile:
Object bla = request.parameters.parameter.Single(p => p.name == "projectid");
Was hier passiert, erschließt sich mir nicht überhaupt nicht. Das liegt unter anderem daran, dass ich den Operator "=>" noch nie gesehen habe. Und nun die Erklärung aus dem Microsoft Developer Network dazu:
Alle Lambda-Ausdrücke verwenden den Operator Lambda =>, der so viel bedeutet wie "wechselt zu".Auf der linken Seite des Operators Lambda werden die Eingabeparameter angegeben (falls vorhanden), und auf der rechten Seite befindet sich der Ausdruck oder Anweisungsblock.Der Lambda-Ausdruck x => x * x bedeutet "x wechselt x Mal zu x". Dieser Ausdruck kann wie folgt einem Delegattyp zugewiesen werden:
w00t? 8O was soll das denn bitte bedeuten? "wechseln zu"? "x wechselt x mal zu x"?!? *seufz*
Fassen wir das mal in Worte: Dem Object bla wird der Wert von request.parameters.parameter.Single zugewiesen, der herauskommt, wenn p zu p.name wechselt und dabei gleich "projectid" ist? Kleine Bemerkung am Rande: p wird nirgends definiert, es erscheint also einfach so aus dem Nix.
Kahore ahau e mohio ana ki to korereo.
PS: Das ist übrigens ein Übersetzungsfehler! Auf Englisch heißt es "x goes to x times x", was bedeutet: "x wird zu x mal x" und eben nicht "x wechselt x Mal zu x". Außerdem erklärt das Codebeispiel ganz gut, was da passieren soll. Allerdings sind Delegates auch so ein Ding, wo ich oft denke "das geht aber auch übersichtlicher"
Also ich code ja grundsätzlich auch eher praktisch als theoretisch, aber ich halte dein Beispiel ja einfach für eine "anonyme Funktion". Klingt aber natürlich viel unwissenschaftlicher ohne griechische Buchstaben.
Der Trick an der Sache ist eigentlich aber die Methode Single:
http://msdn.microsoft.com/de-de/library/bb535118.aspx
Single iteriert also über alle request.parameters.parameter (ein Enumerable von Objects, denen der Compiler während der Iteration kurz den Namen "p" gibt weil das links vom => steht), und liefert Dir genau das Element p zurück, für das p.name == "projectid" zutrifft.
@DidiDaDude: Ich bin beeindruckt! Das beweist, dass mein kleines Affenhirn einfach nicht für solche Sachen geeignet ist und ich eher auf spekulative Programmierung setzen muss
Spekulative Programmierung find ich super! Ich selber hab mich ja auf explorative Programmierung spezialisiert, in dem Bereich kann man glaub auch noch ganz groß rauskommen