有什么理由让C#或Java有lambda?

时间:2008-10-16 18:56:11

标签: c# java lambda

C#或java有lambda的原因是什么?这两种语言都不是基于它们,它似乎是另一种编码方法来做同样的事情,而C#已经做了 我不是对抗性的,如果有理由我想知道原因。出于完全公开的目的,我是一名具有C ++背景且没有lisp经验的Java程序员,我可能只是忽略了这一点。

8 个答案:

答案 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)

对于特定的语言设计学校而言,C#并不是纯粹的(与Java不同,Java由Smalltalkers设计为纯粹的OO语言)。 C#适用于所有人,而且它非常擅长。 C#的基础是将各种风格的编程融入一种高质量,支持良好的语言。这包括程序,面向对象,功能,动态,逻辑等编程风格。显然,到目前为止它没有太多的动态或逻辑编程风格,但很快就会出现(动态编程随C#4.0而来)。

答案 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中的多线程提供更好的安全性,在许多情况下暗示“最终”选项。因此,您不会出于多任务处理的错误。