Какая причина для С# или java с lambdas? Ни один из них не основан на них, он, похоже, является другим методом кодирования, который делает то же самое, что и С#. Я не конфронтационный, если есть причина, по которой я хотел бы знать причину. В целях полного раскрытия я являюсь программистом Java с фоном С++ без опыта lisp, я могу просто пропустить эту точку.
Какая причина для С# или Java с lambdas?
Ответ 1
Существуют общие случаи использования, которые требуют передачи (или хранения) блока кода, который будет выполнен позже. Наиболее распространенными будут прослушиватели событий. Верьте или нет, следующий бит кода использует lambda-ish-конструкцию в 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!")
}
С# делает это довольно легко с делегатами и (даже лучше) лямбдами.
Ответ 2
Я вижу lambdas на С# как очень удобное сокращение для выполнения делегатов. Гораздо удобнее читать код там, где он используется, а не искать в другом месте для определения делегата.
Ответ 3
Синтаксический сахар.
Он обеспечивает удобный и понятный способ представления идеи, в данном случае крошечный метод отбрасывания. Под капотом компилятор расширяет это до вызова делегата и метода, но это то, что делает работу, а не вы.
Ответ 4
Lambdas позволяет писать менее подробный, более выразительный код. Например, список понятий...
BTW, ведется работа по изучению возможности добавления замыканий на Java - тем временем вместо этого необходимо использовать анонимные классы (уродливые).
Ответ 5
С# не стремится к чистоте конкретной школе языкового дизайна (в отличие от Java, которая была разработана Smalltalkers как что-то вроде чистого языка OO). С# собирается для всех вещей для всех, и это довольно хорошо. С# основан на сборе лучших различных стилей программирования на один высококачественный, хорошо поддерживаемый язык. Это включает процедурные, объектно-ориентированные, функциональные, динамические, логические и т.д. Стили программирования. Очевидно, что до сих пор у него не было большого количества динамических или логических стилей программирования, но это скоро произойдет (динамическое программирование идет с С# 4.0).
Ответ 6
В случае С# lambdas используются внутренне для реализации LINQ. См. Статью Эволюция LINQ и ее влияние на дизайн С#
Ответ 7
Lambda позволяет использовать более читаемый код, поскольку они позволяют определять операции ближе к точке использования, а не как текущий метод С++ для использования объектов функции, определение которых иногда далеки от точки использования. (Это не включает некоторые из ускорительных библиотек). Я думаю, что ключевым моментом у лямбда является то, что они позволяют более сжатый и понятный код.
Ответ 8
Они обеспечивают лучшую безопасность, используя многопоточность в Java, подразумевая, во многих случаях, "окончательный" вариант. Таким образом, вы не склонны подвергать ошибкам многозадачность.