Ich habe hier Beiträge gesehen, die die Verwendung von delegates \ lambda-Funktionen zum Lösen der Lücke in der mittleren Idee ohne viel Wiederholung demonstrieren: http://www.markhneedham.com/blog/2009/04/04/functional-c -das-loch-in-der-mitte-muster /
Das Problem scheint zu sein, dass Nachwuchsentwickler und andere nicht unbedingt verstehen, was das Funktionskonzept Zeiger \ Delegat \ Lambda ist, was das Lesen (und möglicherweise das Debuggen) des Codes erschwert.
Sollten wir die Verwendung dieses Tools beim Schreiben von Unternehmenssoftware vermeiden oder stark einschränken, insbesondere in kleinen Teams oder Einzelentwicklergeschäften?
Oder ist es akzeptabel, es mit entsprechenden Kommentaren zu verwenden und zu erwarten, dass der nächste Entwickler die Lambda-Funktionen versteht oder etwas über sie erfährt, wenn ich nicht mehr da bin?
Array
Klasse bis zu komplizierten ORMs. Nun, niemand beschwert sich.Antworten:
Ganz ehrlich, das ist ihr Problem. Dafür sorgen Sie, dass sie ausgebildet sind. Eine gute Technik kann man nicht anwenden, nur weil manche Leute sie vielleicht nicht verstehen. Wenn sie Hilfe benötigen, können sie den Autor fragen. Noch wichtiger ist, dass Lambda-Funktionen zu extrem häufigen Sprachmerkmalen werden.
Sollten wir Vererbung nicht verwenden, weil einige Leute es nicht verstehen? Zur Hölle, manche Menschen weigern sich, an Wissenschaft, Keime oder andere lächerliche Dinge zu glauben. Sie müssen in der Lage sein, weiterzumachen und sich nicht davon abhalten zu lassen, dass andere nicht mit Ihnen mithalten können, den bestmöglichen Code zu schreiben. Lambda-Funktionen sind eine großartige Funktion, die beim Schreiben von Code sehr hilfreich ist, und Sie sollten jede erdenkliche Hilfe in Anspruch nehmen.
Ein Entwickler sollte wissen, wie er mit der Sprache umgeht, in der er sich gerade befindet oder nicht. Wenn dies nicht der Fall ist, feuern Sie sie und suchen Sie jemanden, der dies tut, oder schulen Sie sie, damit sie es tun.
quelle
Ja, benutze sie.
Ich bin ein Junior-Entwickler und kenne / verstehe Lambdas (und die anderen Konzepte, die Sie erwähnt haben). Ich kann mir nichts vorstellen, das einen Nachwuchsentwickler daran hindert, all diese Konzepte in sehr kurzer Zeit zu erlernen. Junioren verfügen möglicherweise nicht über die gleiche Erfahrung / Sachkenntnis, wenn es um viele Fälle der Softwareentwicklung geht. Konzepte wie Lambdas können jedoch von jedem mit einem grundlegenden Verständnis der Programmierung und einer Internetverbindung einfach verstanden werden. Es ist auch seltsam, dass Sie Lambdas als Beispiel gewählt haben, wenn man bedenkt, dass Sie mit C # wahrscheinlich nicht einmal so viel Vorsprung haben, Lambdas gegenüber den Junior - Entwicklern zu erlernen (diese wurden erst 2008 eingeführt, wenn ich es so finde) richtig merken).
Kurz gesagt, es ist nicht nötig, Ihren Code für uns Neulinge zu verfälschen. Es wird uns gut gehen und wir würden es vorziehen, an der bestmöglichen Implementierung zu arbeiten, die Sie finden können. :)
quelle
Wenn sie eine sinnvolle Lösung für Ihr Problem sind, sollten Sie sie verwenden.
Beschränken Sie sich nicht künstlich - es ist wahrscheinlicher, dass Sie Code mit schlechter Qualität erhalten, der schwer zu pflegen ist.
Wenn der Code mit den entsprechenden Kommentaren gut geschrieben ist, sollten die folgenden von Ihnen lernen können .
quelle
Fügen Sie einen Link zur msdn-Dokumentation in die Kommentare oben in einem Block ein, der sie verwendet, und fahren Sie dann fort. Sie sollten keine Angst haben, neue / komplexe Technologien zu verwenden, die Teil eines Entwicklerberufs sind, um Dinge zu lernen, die sie nicht kennen.
quelle
Dann müssen sie sie lernen. Zeitraum.
Nehmen Sie sich ein paar Minuten Zeit, um es ihnen zu erklären. Es ist nicht schwer.
quelle
Sie sollten das richtige Werkzeug für den Job verwenden. Wenn es einen einfacheren und klareren Weg gibt, das vorliegende Problem zu lösen, verwenden Sie diesen. Wenn Sie sich mit etwas befassen möchten, von dem Sie glauben, dass es ein fortgeschrittenes Thema für zukünftige Betreuer ist, markieren Sie es deutlich und fügen Sie einen Verweis auf die Dokumentation hinzu, die die Technik erklärt.
Es ist zu beachten, dass dies drei verschiedene Dinge sind.
quelle
Zwei mögliche Szenarien:
a) Ihre Kollegen (oder die meisten von ihnen) sind angemessen qualifiziert. Sie müssen Lambdas lernen, sind Teil der Sprache und manchmal genau das richtige Werkzeug für den Job. Also, wenn sie in der Tat das beste Werkzeug sind, benutzen Sie sie auf jeden Fall. Vermeiden Sie es einfach, sie zu benutzen, denn Sie haben sie gerade erst selbst kennengelernt, und Sie sind alle aufgeregt und glauben, sie seien eine Silberkugel.
b) Ihre Kollegen (oder die meisten von ihnen) sind inkompetent. Auf keinen Fall werden sie Lambdas, Closures, Funktionszeiger oder ein ähnliches Meta-Coding-Konzept jemals vollständig verstehen. Sie haben wahrscheinlich Schwierigkeiten, Zeiger, Verweise und Rekursionen bereits zu verstehen. In dieser Situation ist das Beste, was Sie tun können, die Kugel zu beißen, eine plumpe, ausführliche, lambdafreie Lösung zu verwenden und Ihren Lebenslauf aufzufrischen, da Sie auf Jobsuche sein sollten.
quelle
Hier kann Konsistenz sehr hilfreich sein. Wenn Sie es konsequent mit demselben Stil usw. verwenden, müssen die Leser es nur einmal lernen und erkennen es dann überall.
Es könnte auch hilfreich sein, zumindest anfangs explizit zu sein. Zum Beispiel sind diese beiden äquivalent:
... aber im ersten Fall ist es offensichtlich, wenn Sie die Lambda-Syntax kennen, was wir tun. Auch wenn Sie die Lambda-Syntax nicht kennen, ist es offensichtlich, dass Sie etwas Neues sehen und es nachschlagen müssen. Im zweiten Fall sieht es so aus, als würden Sie eine Variable übergeben.
Ich weiß, dass ReSharper Sie dazu drängt, es auf den zweiten Fall umzustellen, aber ich frage mich, ob das immer eine gute Idee ist. Im zweiten Fall muss man wissen, dass
doSomething
einAction
.quelle
doSomething
brauchtAction
." Und wie unterscheidet sich das davon, dass man wissen muss, dass man einefunctionWithNameThatDoesNotSpecifyItsArgumentTypes
brauchtObjectOfSomeType
? Tatsächlich ist es in Sprachen, in denen Funktionen echte erstklassige Objekte sind, nicht anders.Ich finde bestimmte Konzepte oft schwer zu verstehen, weil sie nur abstrakt beschrieben werden, anstatt sie in praktischen, realen Situationen zu begegnen. Ich persönlich würde es begrüßen, auf solche Konstrukte zu stoßen.
Das Hauptszenario, an das ich denken kann, um dies zu vermeiden, ist, wenn das Programmieren nicht die Hauptaufgabe der anderen Person ist. Zum Beispiel ein Systemadministrator oder ein Bioinformatiker, der die meiste Zeit mit tatsächlichen Experimenten verbringt (eine "Laborratte").
quelle
Vielleicht nennen wir hier DoAction, weil sein Körper zu lang ist, um in das Lambda selbst zu passen. In diesem Fall hat die Verwendung der ForEach () - Erweiterungsmethode für List keinen großen Vorteil gegenüber der Verwendung der regulären foreach-Schleife, obwohl sie vermutlich ein paar Codezeilen spart. In diesem speziellen Fall hat uns die Verwendung von ForEach () möglicherweise dazu veranlasst, etwas zu tun, das tatsächlich mehr Code benötigt und auf dem Stapel zusätzliche Thrashs verursacht, als erforderlich sind. Das übergebene Argument muss überhaupt kein Lambda sein
Sie sollten DoAction einfach so aufrufen:
Kein Lambda. Der Schlüssel ist, sich zu merken, was Sie wirklich passieren, wenn Sie einen Lambda-Ausdruck erstellen: eine Art Verknüpfung zum Definieren einer Delegateninstanz. Ja, es hat auch Vorteile wie das Schließen, aber man sollte nicht den Überblick verlieren, was der Methodenaufruf erwartet. In diesem Fall wird eine Adresse für eine Methode erwartet, die der Signatur von Action entspricht. DoAction ist bereits eine solche Methode. Das Erstellen des Lambda fügt also nur einen völlig unnötigen Methodenaufruf hinzu.
quelle
IMHO, auf jeder technischen Ebene, die über der technischen Ebene des Teams liegt, zu schreiben, ist falsch. Wenn Ihre Teammitglieder mit Lambda-Ausdrücken und -Funktionen nicht wirklich vertraut sind und keine Zeit zum Erlernen haben (sie sollten ihre Zeit mit der Leistungsoptimierung von Datenbanken verbringen, mehr an der Benutzeroberfläche arbeiten, Komponenten erstellen usw.), dann bin ich fest entschlossen Schlagen Sie vor, sie nicht zu verwenden . Wenn sie jedoch bereit sind zu lernen und Freizeit haben oder das Wissen bereits kennen, warum dann nicht?
Ich denke, dies ist ein relatives Problem, das je nach Team und technischem Niveau des Teams beurteilt werden sollte. Und das gilt nicht nur für Lambda-Funktionen. Dies ist der Fall von technischem Wissen. Wenn ein Team beispielsweise über das Repository-Muster Bescheid weiß, über das Know-how verfügt, um es zu implementieren und zu warten, sollten Sie dies tun. Aber wenn nicht, suchen Sie einfach einen anderen Weg. Wenn Sie mit OO-JavaScript vertraut sind, können Sie skalierbaren Code in JavaScript erstellen. Wenn dies nicht der Fall ist, kehren Sie einfach zu prozeduralem JavaScript zurück.
quelle