C#或java有lambda的原因是什么?这两种语言都不是基于它们,它似乎是另一种编码方法来做同样的事情,而C#已经做了 我不是对抗性的,如果有理由我想知道原因。出于完全公开的目的,我是一名具有C ++背景且没有lisp经验的Java程序员,我可能只是忽略了这一点。
答案 0 :(得分:40)
有一些常见的用例需要传递(或存储)稍后要执行的代码块。最常见的是事件监听器。信不信由你,下面的代码使用Java中的lambda-ish结构:
JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed!");
}
});
匿名的内部阶级充当了lambda,尽管它非常冗长。通过一些隐式转换魔术,我们可以在Scala中编写以下等效内容:
val button = new JButton("Push me!")
button.addActionListener { e =>
println("Pressed!")
}
C#使代表和(甚至更好的)lambdas相当容易。
答案 1 :(得分:9)
我认为C#中的lambdas是一个非常方便的快捷方式。将代码放在正在使用的位置,而不是在别处搜索委托定义,可读性更强。
答案 2 :(得分:4)
Syntactic Sugar。
它提供了一种方便且更易读的方式来表示一个想法,在这种情况下是一个小小的丢弃方法。在引擎盖下,编译器将其扩展为委托和方法调用,但这是完成工作的事情,而不是你。
答案 3 :(得分:2)
Lambdas允许您编写更简洁,更具表现力的代码。例如,list comprehensions ...
BTW,正在研究为Java添加闭包的可能性 - 与此同时,有必要使用匿名类(丑陋)。答案 4 :(得分:1)
答案 5 :(得分:1)
在C#的情况下,lambdas在内部用于实现LINQ。请参阅文章The Evolution Of LINQ And Its Impact On The Design Of C#
答案 6 :(得分:0)
Lambda允许更可读的代码,因为它们允许将操作定义为更接近使用点,而不是像当前使用函数对象的C ++方法那样,其定义有时远离使用点。 (这不包括一些增强库)。我认为lambdas的关键点在于它们允许更简洁易懂的代码。
答案 7 :(得分:-2)
它们使用Java中的多线程提供更好的安全性,在许多情况下暗示“最终”选项。因此,您不会出于多任务处理的错误。