Подтвердить что ты не робот

Какая причина для С# или Java с lambdas?

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

4b9b3361

Ответ 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).

Ответ 7

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

Ответ 8

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