Презентация Современные технологии программирования. λ-выражения в Java 8. Функция как параметр онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Современные технологии программирования. λ-выражения в Java 8. Функция как параметр абсолютно бесплатно. Урок-презентация на эту тему содержит всего 72 слайда. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Современные технологии программирования. λ-выражения в Java 8. Функция как параметр
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:72 слайда
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:355.50 kB
- Просмотров:83
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№4 слайд
![Дополнительное преимущество](/documents_6/5f188b9f9930030db525b304183d5b31/img3.jpg)
Содержание слайда: Дополнительное преимущество:
новый способ мышления
Функциональный подход: многие классы задач решаются проще, код становится легким для чтения, что упрощает его дальнейшее сопровождение.
Поддержка потоков: потоки являются обертками источников данных (массивы, коллекции, …), которые используют лямбда-выражения.
№5 слайд
![Основные моменты Вы пишете](/documents_6/5f188b9f9930030db525b304183d5b31/img4.jpg)
Содержание слайда: Основные моменты
Вы пишете код, который похож на функцию
И получаете экземпляр класса, который реализует интерфейс, который ожидается в данном случае.
Интерфейс содержит ТОЛЬКО ОДИН абстрактный метод
Такой интерфейс называется функциональным или SAM-интерфейсом (Single Abstract Method). Он является типом лямбда-выражения.
№9 слайд
![-выражение как переменная](/documents_6/5f188b9f9930030db525b304183d5b31/img8.jpg)
Содержание слайда: λ-выражение как переменная
AutoCloseable c = () -> cleanupForTryWithResources();
Thread.UncaughtExceptionHandler handler = (thread, exception) -> doSomethingAboutException();
Formattable f = (formatter,flags,width,precision) -> makeFormattedString();
ContentHandlerFactory fact = mimeType -> createContentHandlerForMimeType();
№19 слайд
![Использование значений](/documents_6/5f188b9f9930030db525b304183d5b31/img18.jpg)
Содержание слайда: Использование значений
Лямбда-выражения могут ссылаться на переменные, которые не объявлены как final (но значение таким переменным можно присвоить только один раз)
Такие переменные называются эффективно финальными (их можно корректно объявить как final)
Также можно ссылаться на изменяемые переменные экземпляра: “this” в лямбда-выражении ссылается на главные класс (не вложенный, который создается для лямбда-выражения)
Явное объявление
Эффективно финальная переменная
№20 слайд
![Аннотация Override Какой](/documents_6/5f188b9f9930030db525b304183d5b31/img19.jpg)
Содержание слайда: Аннотация @Override
Какой смысл использовать аннотацию @Override?
Корректный код будет работать и без @Override, но @Override
Отслеживает ошибки во время компиляции
Описывает суть метода
Сообщает остальным разработчикам, что данный метод из супер-класса, и в HttpServlet API описана его реализация
№21 слайд
![Аннотация FunctionalInterface](/documents_6/5f188b9f9930030db525b304183d5b31/img20.jpg)
Содержание слайда: Аннотация @FunctionalInterface
Отслеживает ошибки во время компиляции
Если разработчик добавит второй абстрактный метод в интерфейс, интерфейс не будет скомпилирован.
Описывает суть интерфейса
Сообщает остальным разработчикам, что данный интерфейс будет использоваться с лямбда-выражениями
Аннотация не обязательна
№23 слайд
![Пример. Численное](/documents_6/5f188b9f9930030db525b304183d5b31/img22.jpg)
Содержание слайда: Пример. Численное интегрирование
Использовать лямбда-выражения для интегрируемой функции.
Определить функциональный интерфейс с методом double eval(double x) для описания интегрируемой функции.
Для проверки интерфейса во время компиляции и для объявления, что интерфейс функциональный и его можно использовать в лямбда-выражениях, используем аннотацию @FunctionalInterface
№28 слайд
![Ссылка на методы Можно](/documents_6/5f188b9f9930030db525b304183d5b31/img27.jpg)
Содержание слайда: Ссылка на методы
Можно использовать ссылку ИмяКласса::имяСтатическогоМетода или имяПеременной::методЭкземпляраКласса в лямбда-выржениях
Например, Math::cos или myVar::myMethod
Это еще один способ задания функции, которая уже описана, в данном случае не нужно писать лямбда-выражение, вместо этого используйте ссылку на этот метод
Функция должны соответствовать сигнатуре метода функционального интерфейса
Тип определяется только из контекста
№30 слайд
![Пакет java.util.function](/documents_6/5f188b9f9930030db525b304183d5b31/img29.jpg)
Содержание слайда: Пакет java.util.function
Такие интерфейсы как Integrable очень широко используются.
Поэтому в Java 8 нужны интерфейсы с более общим названием, который можно применять в подобных случаях.
Пакет java.util.function определяет множество простых функциональных (SAM) интерфейсов.
Они называются согласно аргументам и возвращаемым значениям.
№31 слайд
![Пакет java.util.function](/documents_6/5f188b9f9930030db525b304183d5b31/img30.jpg)
Содержание слайда: Пакет java.util.function
Например, можно заменить интерфейс Integrable на встроенный функциональный интерфейс DoubleUnaryOperator.
Для того, чтобы узнать имя метода, нужно посмотреть API.
Не смотря на то, что лямбда-выражения не ссылаются на имя метода, код, в котором используются лямбда-выражения должен ссылаться на соответствующие методы интерфейса.
№32 слайд
![Типизированные и обобщенные](/documents_6/5f188b9f9930030db525b304183d5b31/img31.jpg)
Содержание слайда: Типизированные и обобщенные интерфейсы
Тип задан
Примеры (существует множество других интерфейсов)
IntPredicate (int in, boolean out)
LongUnaryOperator (long in, long out)
DoubleBinaryOperator(double in1, double in2, double out)
Пример
DoubleBinaryOperator f =
(d1, d2) -> Math.cos(d1 + d2);
Обобщенные
Также существуют обобщенные интерфейсы (Function<T,R>, Predicate<T>) с более широкой степенью применения
№46 слайд
![Интерфейс Function R apply T](/documents_6/5f188b9f9930030db525b304183d5b31/img45.jpg)
Содержание слайда: Интерфейс Function
R apply(T t)
Позволяет задать «функцию», которая принимает аргумент T и возвращает R.
Интерфейс BiFunction работает аналогичным образом, но метод apply принимает два аргумента типа T.
Преимущество
Позволяет преобразовать значение или коллекцию значений, написать гораздо более краткий код, чем без лямбда-выражений
№51 слайд
![Применение BinaryOperator](/documents_6/5f188b9f9930030db525b304183d5b31/img50.jpg)
Содержание слайда: Применение BinaryOperator
Делает mapSum более гибкой
Вместо
mapSum(List<T> entries, Function<T, Integer> mapper)
Можно обобщить ее, передав оператор (который был жестко задан в методе mapSum):
mapCombined(List<T> entries,
Function<T, R> mapper,
BinaryOperator<R> combiner)
№55 слайд
![Область видимости переменных](/documents_6/5f188b9f9930030db525b304183d5b31/img54.jpg)
Содержание слайда: Область видимости переменных
Лямбда-выражения используют статические области действия переменных
Выводы:
Ключевое слово this ссылается на внешний класс, а не на анонимный (тот, в который преобразуется лямбда-выражение)
Нет переменной OuterClass.this
До тех пор, пока лямбда внутри вложенного класса
Лямбда не может создавать новые переменные с такими же именами как у метода, вызвавшего лямбда
Лямбда может ссылаться (но не изменять) локальные переменные из окружающего кода
Лямбда может обращаться (и изменять) переменные экземпляра окружающего класса
№56 слайд
![Примеры Ошибка повторное](/documents_6/5f188b9f9930030db525b304183d5b31/img55.jpg)
Содержание слайда: Примеры
Ошибка: повторное использование имени переменной
double x = 1.2;
someMethod(x -> doSomethingWith(x));
Ошибка: повторное использование имени переменной
double x = 1.2;
someMethod(y -> { double x = 3.4; ... });
Ошибка: лямбда изменяет локальную переменную
double x = 1.2;
someMethod(y -> x = 3.4);
№60 слайд
![Вызов метода экземпляра](/documents_6/5f188b9f9930030db525b304183d5b31/img59.jpg)
Содержание слайда: Вызов метода экземпляра класса
переменная::методЭкземпляраКласса
Создает лямбда-выражение, которое принимает то количество аргументов, которое указано в методе.
String test = "PREFIX:";
List<String> result1 = transform(strings, test::concat);
Класс::методЭкземпляраКласса
Создает лямбда-выражение, которое принимает на один аргумент больше, чем соответствующий метод. Первый аргумент – объект, от которого вызывается метод, остальные аргументы – параметры метода.
List<String> result2=
transform(strings,String::toUpperCase);
Скачать все slide презентации Современные технологии программирования. λ-выражения в Java 8. Функция как параметр одним архивом:
Похожие презентации
-
Объектно-ориентированное программирование (ООП), как технология программирования
-
Программирование на платформе Java EE. Разработка компонентов на основе технологии Enterprise JavaBeans (часть I)
-
RxJava. Функциональное реактивное программирование (FRP)
-
Основы программирования. Функции с параметрами. Рисование с использованием относительных координат
-
Строки. Функции для работы со строками. Строки, как параметры функций. (Лекция 12)
-
Структурные и функциональные модели. Программирование, как моделирование
-
Технология программирования. Функции и структуры
-
Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6. 1)
-
Функциональное программирование. Бестиповые арифметические выражения. (Лекция 2. 2)
-
Компонентная модель в объектно-ориентированном программировании. Технология JavaBeans