簡體   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