Лямбда-выражение в упрощенном виде

В выпуске Java 8 было введено лямбда-выражение. Это техника для написания четкого и лаконичного кода. Одним из тех понятий, которые людям, особенно новичкам, сложно понять, является Лямбда-выражение. В этой статье вы узнаете о лямбда-выражениях, включая их синтаксис, использование и обоснование.

Обзор лямбда-выражений

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

Java — это объектно-ориентированный язык программирования. Однако введение в Java лямбда-выражений позволило нам писать код на Java, используя парадигму функционального программирования.

Следующие два фактора играют жизненно важную роль в существовании Лямбда-выражений:

  1. Внедрение функционального программирования в Java.
  2. Улучшить четкое и лаконичное кодирование в Java

Интерфейс Java

Концепция интерфейсов Java заключается в том, что они представляют собой контракт между классом и конкретным интерфейсом, который был реализован, требуя, чтобы класс предоставил свою собственную реализацию методов интерфейса. Пример ниже

// Interface Animal
public interface Animal {

    public String talking();
}

// Class Sheep with implementation
public class Sheep implements Animal{

    public String talking() {

        return "Meaeeeeeeeee";
  }
}

Вход в полноэкранный режим Выйти из полноэкранного режима

Теперь, чтобы вызвать этот метод, мы должны сначала создать объект класса Sheep, а затем использовать этот объект для вызова метода, как показано в примере кода ниже.


// Sheep object
Sheep sheepObj = new Sheep(); 

// calling talking method
sheepObj.talking();

Войти в полноэкранный режим Выйти из полноэкранного режима

Другой подход заключается в том, чтобы написать метод sheepTalking и сделать передаваемый аргумент типа Animal.


public String sheepTalking(Animal animalTalk) {

    return animalTalk.talking();
}


Вход в полноэкранный режим Выход из полноэкранного режима

Таким образом, этот метод принимает любой объект из класса, реализующего интерфейс, как показано в примере ниже.


// Sheep object
Sheep sheepObj = new Sheep(); 

// Sheep object is passed as parameter
sheepObj.sheepTalking(sheepObj);

Войти в полноэкранный режим Выйти из полноэкранного режима

По сути, то, как написан метод, принимающий объекты класса Sheep, выглядит так, как будто мы предоставляем реализацию метода непосредственно в другой метод в качестве аргумента, как показано ниже.


// Depict how it look
  sheepObj.sheepTalking(
            public String talking() {

                return "Meaeeeeeeeee";
        }
        );
Вход в полноэкранный режим Выход из полноэкранного режима

Синтаксис лямбда-выражений

Лямбда-выражения — основная тема нашего внимания. Реализация метода может быть передана в качестве аргумента с помощью лямбда-выражений. Процесс аналогичен тому, что мы делали выше, но с другим синтаксисом. Мы указываем скобку для аргумента и добавляем тире и знак «больше чем» перед фигурными скобками, как показано на рисунке; модификатор доступа, тип возврата и имя метода не указываются.


// Lambda Expression
sheepObj.sheepTalking( () -> {
             return "Meaeeeeeeeee";
            }
        );

Вход в полноэкранный режим Выйти из полноэкранного режима

Как вы можете видеть, синтаксис был изменен, чтобы убрать модификатор доступа, опустить тип возврата и имя метода; именно так можно написать лямбду в Java.

*Функциональный интерфейс

Функциональные интерфейсы — это интерфейсы с одним абстрактным методом. Single Abstract Method Interface, или SAM Interface, — это другое название для них. Смотрите пример кода для иллюстрации.


@FunctionalInterface
public interface Animal {

    public String talking();
}

Вход в полноэкранный режим Выход из полноэкранного режима

Термин «абстрактный метод» относится к методу без определенной реализации в интерфейсе. В результате, функциональный интерфейс — это интерфейс, который имеет только один абстрактный метод. Лямбда-выражение совместимо только с функциональным интерфейсом, любой другой интерфейс не может быть использован с Лямбда-выражением.

Хотя аннотация @FuntionalInterface не является обязательной, ее рекомендуется использовать, особенно в больших проектах, чтобы предупредить других разработчиков, работающих над кодовой базой, и предотвратить обновления, которые могут сломать код.
Вы можете разработать свои собственные функциональные интерфейсы, но в Java уже есть несколько встроенных, поэтому лучше проверить, прежде чем писать собственные.

Использование встроенного интерфейса SAM для Java выходит за рамки этой статьи, но пакет Java.until.function включает встроенные функциональные интерфейсы для Java. Я расскажу об этом пакете и обсужу более популярные интерфейсы в одной из следующих статей.

Резюме

  1. Чтобы передать поведение или метод в качестве параметра, мы используем лямбда-выражение.

  2. Синтаксис лямбда-выражений

  • Без модификатора доступа
  • Опускать возвращаемый тип
  • Имя метода не должно быть добавлено
  1. Лямбда-выражения делают наш код коротким, лаконичным и читабельным.

Если у вас возникли вопросы, пожалуйста, воспользуйтесь областью комментариев. Общайтесь со мной в Twitter и LinkedIn.
Хорошего дня и спасибо за уделенное время.

Кредит

Документация по Java 8

Оцените статью
devanswers.ru
Добавить комментарий