Какова причина того, что в C # или Java есть лямбды? - PullRequest
18 голосов
/ 16 октября 2008

Какая причина в том, что в C # или java есть лямбды? Ни один из этих языков не основан на них, похоже, это еще один метод кодирования, который делает то же самое, что уже делал C #.
Я не веду конфронтацию, если есть причина, я хотел бы знать причину. В целях полного раскрытия я программист на Java с фоном C ++ без опыта работы с lisp, возможно, я просто упускаю суть.

Ответы [ 8 ]

40 голосов
/ 16 октября 2008

Существуют распространенные сценарии использования, которые требуют передачи (или сохранения) блока кода для последующего выполнения. Наиболее распространенными будут слушатели событий. Верьте или нет, в следующем фрагменте кода используется Java-конструкция с лямбда-выражением:

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

Анонимный внутренний класс действует как лямбда, хотя и очень многословный. Немного неявной магии преобразования, мы можем написать следующий эквивалент в Scala:

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

C # делает подобные вещи довольно легкими с делегатами и (еще лучше) лямбдами.

9 голосов
/ 16 октября 2008

Я рассматриваю лямбды в C # как очень удобный способ работы с делегатами. Гораздо удобнее читать код там, где он используется, а не искать в другом месте определение делегата.

4 голосов
/ 16 октября 2008

Синтаксический сахар.

Он предоставляет удобный и более читабельный способ представления идеи, в данном случае крошечный одноразовый метод. Под капотом компилятор расширяет это до делегата и вызова метода, но это дело, а не вы.

2 голосов
/ 16 октября 2008

Лямбды позволяют писать менее многословный, более выразительный код. Например, список пониманий ...

Кстати, ведется работа по изучению возможности добавления замыканий в Java - тем временем необходимо использовать анонимные классы вместо этого (безобразно).

1 голос
/ 16 октября 2008

В случае C # лямбды используются внутри для реализации LINQ. См. Статью Эволюция LINQ и ее влияние на дизайн C #

1 голос
/ 16 октября 2008

C # не подходит для определенной школы языкового дизайна (в отличие от Java, который был спроектирован Smalltalkers-ом как чистый OO-язык). C # подходит для всех, для всех, и это довольно хорошо. C # основан на объединении лучших из различных стилей программирования в один высококачественный, хорошо поддерживаемый язык. Это включает в себя процедурный, объектно-ориентированный, функциональный, динамический, логический и т. Д. Стили программирования. Очевидно, что пока он не имеет особого подхода к динамическому или логическому стилю программирования, но это скоро произойдет (динамическое программирование идет с C # 4.0).

0 голосов
/ 31 мая 2016

Они предлагают лучшую безопасность, используя многопоточность в Java, во многих случаях подразумевая «окончательный» вариант. Таким образом, вы не подвержены ошибкам многозадачности.

0 голосов
/ 18 октября 2008

Лямбда допускает более читабельный код в том смысле, что позволяет определять операции ближе к точке использования, а не как текущий метод C ++, использующий функциональные объекты, определение которых иногда далеко от точки использования. (Это не включает в себя некоторые из библиотек наддува). Я думаю, что ключевым моментом из лямбд является то, что они позволяют более краткий и простой для понимания код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...