Frage

Welcher Grund gibt es für C # oder Java mit Lambda-Ausdrücke? Weder Sprache basiert um sich herum, es erscheint ein weiteres Codierverfahren, um die gleiche Sache zu tun, dass C # bereits getan hat.
Ich bin nicht auf Konfrontation, wenn es einen Grund gibt, warum würde ich den Grund wissen. Für die Zwecke der vollständigen Offenlegung bin ich ein Java-Programmierer mit einem C ++ Hintergrund ohne Lispeln Erfahrung kann ich sein, nur fehlt der Punkt.

War es hilfreich?

Lösung

Es gibt gemeinsame Anwendungsfälle, die (oder speichert) einen Codeblock vorbei erfordern später ausgeführt werden soll. Die häufigste Ereignis Zuhörer wären. Ob Sie es glauben oder nicht, das folgende Stück Code verwendet eine Lambda-ish-Konstrukt in Java:

JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Pressed!");
    }
});

Die anonyme innere Klasse als Lambda wirkt, wenn auch eine äußerst ausführlichen ein. Mit einem wenig von impliziter Umwandlung Magie, können wir die folgenden äquivalent in Scala schreiben:

val button = new JButton("Push me!")
button.addActionListener { e =>
  println("Pressed!")
}

C # macht diese Art der Sache ziemlich einfach, mit den Delegierten und (noch besser) lambdas.

Andere Tipps

Ich sehe lambda in C # als eine sehr bequeme Abkürzung für die Delegierten zu tun. Viel besser lesbar Recht gibt, den Code zu haben, wo es eher verwendet wird als in anderen Ländern für die Delegierten Definition suchen zu müssen.

Die syntaktische Zucker.

Es bietet eine bequeme und lesbare Art und Weise eine Idee, in diesem Fall eine kleine Wegwerf-Methode darzustellen. Unter der Haube dehnt sich der Compiler, dass aus zu einem Delegierten und Methodenaufruf, aber es ist die Sache, um die Arbeit zu tun, nicht Sie.

Lambdas können Sie schreiben weniger ausführlich, ausdruck Code. Zum Beispiel Listenkomprehensionen ...

BTW, wird daran gearbeitet, die Möglichkeit der Zugabe von Schließungen zu Java erkunden -. In der Zwischenzeit anonyme Klassen ist es notwendig, zu verwenden, anstatt (hässlich)

C # für Reinheit wird nicht auf eine bestimmte Schule der Sprache Designs (im Gegensatz zu Java, die von den Smalltalker entworfen wurden, als so etwas wie eine reine OO-Sprache zu sein). C # wird für alle-Dinge-to-all-Menschen, und es ist ziemlich gut darin. C # basiert das Beste aus den verschiedenen Arten der Programmierung in eine qualitativ hochwertigen um das Sammeln, gut unterstützte Sprache. Dazu gehört verfahrens, objektorientierte, funktionale, dynamische, Logik usw. Arten der Programmierung. Offensichtlich so weit geht es nicht viel in der Art von dynamischen oder logischen Arten der Programmierung, aber das ist bald zu kommen (dynamische Programmierung mit C # 4.0 kommt).

Bei C # werden lambdas intern verwendet LINQ zu implementieren. Siehe den Artikel The Evolution Of LINQ und ihre Auswirkungen auf das Design von C #

Lambdas ermöglichen lesbaren Code, dass sie erlauben Operationen der Verwendungsstelle näher definiert werden, anstatt wie die aktuelle C ++ Methode der Funktion Objekte, deren Definition ist manchmal weit von der Verwendungsstelle. (Dies wird einige der Boost-Bibliotheken nicht einschließlich). Ich glaube, der entscheidende Punkt von Lambda ist, dass sie mehr prägnant und leicht verständlich Code ermöglichen.

Sie bieten eine bessere Sicherheit in Java das Multi-Threading verwendet, indem die „endgültige“ Option in vielen Fällen impliziert. Sie sind also nicht für Multitasking fehleranfällig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top