繁体   English   中英

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

[英]What reason is there for C# or Java having lambdas?

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

有一些常见的用例需要传递(或存储)稍后要执行的代码块。 最常见的是事件监听器。 信不信由你,下面的代码使用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!")
}

对于代理人和(甚至更好的)lambda,C#使这种事情变得相当容易。

我认为C#中的lambdas是一个非常方便的快捷方式。 将代码放在正在使用的位置,而不是在别处搜索委托定义,更具可读性。

句法糖。

它提供了一种方便且更易读的方式来表示一个想法,在这种情况下是一个小小的丢弃方法。 在引擎盖下,编译器将其扩展为委托和方法调用,但这是完成工作的事情,而不是你。

Lambdas允许您编写更简洁,更具表现力的代码。 例如, 列表推导 ......

顺便说一下,正在研究为Java添加闭包的可能性 - 与此同时,有必要使用匿名类(丑陋)。

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

在C#的情况下,lambdas在内部用于实现LINQ。 参见文章LINQ的演变及其对C#设计的影响

Lambda允许更可读的代码,因为它们允许将操作定义为更接近使用点,而不是像当前使用函数对象的C ++方法那样,其定义有时远离使用点。 (这不包括一些增强库)。 我认为lambdas的关键点在于它们允许更简洁易懂的代码。

它们使用Java中的多线程提供更好的安全性,在许多情况下暗示“最终”选项。 因此,您不会出于多任务处理的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM