По какой причине в C# или Java есть лямбда-выражения?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
6 013
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Анонимные функции и лямбды различны в C# - blogs.msdn.com/ericlippert/archive/2007/01/10/…

johnstok 16.10.2008 23:07

@johnstok - немного поздно указывать на это, но в этой статье говорится, что они отличаются только с точки зрения разработчика компилятора C# (которым является автор этого блога).

Daniel Earwicker 26.05.2010 15:09

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

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

Ответ принят как подходящий

Существуют распространенные варианты использования, которые требуют передачи (или сохранения) блока кода для последующего выполнения. Самыми распространенными будут прослушиватели событий. Вы не поверите, но в следующем фрагменте кода в 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# упрощает подобные задачи с помощью делегатов и (что еще лучше) лямбда-выражений.

Я вижу причину, по которой на вашем примере, я также могу видеть, как это могло вызвать много путаницы при попытке отладки до тех пор, пока один из лямбда-выражений не выучен очень хорошо.

WolfmanDragon 16.10.2008 23:22

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

Daniel Spiewak 16.10.2008 23:25

Тонкая разница между лямбда-выражениями делегатов (более сопоставимыми с анонимными методами) и лямбда-выражениями-выражениями также является важным соображением, но хорошей публикацией.

Marc Gravell 17.10.2008 12:26

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

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

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

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

обновил ссылку web.archive.org/web/20080828034246/http://msdn.microsoft.com‌ /…

Olivier MATROT 04.07.2018 19:54

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

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

Другие вопросы по теме