Презентация Современные технологии программирования. λ-выражения в 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
  • Автор:
    неизвестен



Слайды и текст к этой презентации:

№1 слайд
Современные технологии
Содержание слайда: Современные технологии программирования λ-выражения в Java 8

№2 слайд
Функция как параметр Во
Содержание слайда: Функция как параметр Во многих языках функцию можно передавать в качестве параметра Динамическое определение типа: JavaScript, Lisp, Sceme, … Строгая типизация: Ruby, Scala, … Функциональный подход позволяет писать более краткий и результативный код Javascript:

№3 слайд
Основное преимущество
Содержание слайда: Основное преимущество: лаконичный и выразительный код Java 7 Java 8

№4 слайд
Дополнительное преимущество
Содержание слайда: Дополнительное преимущество: новый способ мышления Функциональный подход: многие классы задач решаются проще, код становится легким для чтения, что упрощает его дальнейшее сопровождение. Поддержка потоков: потоки являются обертками источников данных (массивы, коллекции, …), которые используют лямбда-выражения.

№5 слайд
Основные моменты Вы пишете
Содержание слайда: Основные моменты Вы пишете код, который похож на функцию И получаете экземпляр класса, который реализует интерфейс, который ожидается в данном случае. Интерфейс содержит ТОЛЬКО ОДИН абстрактный метод Такой интерфейс называется функциональным или SAM-интерфейсом (Single Abstract Method). Он является типом лямбда-выражения.

№6 слайд
-выражение Анонимная функция
Содержание слайда: λ-выражение Анонимная функция Выражение описывающее анонимную функцию Выражение описывающее анонимную функцию, результатом исполнения которого является некоторый объект, реализующий требуемый функциональный интерфейс

№7 слайд
Где используют -выражения В
Содержание слайда: Где используют λ-выражения В переменной или параметре, где ожидается интерфейс с одним методом В коде, который использует интерфейс В коде, который вызывает интерфейс, можно использовать λ-выражение

№8 слайд
-выражение как аргумент
Содержание слайда: λ-выражение как аргумент метода Arrays.sort(testStrings, (s1, s2) -> s1.length() - s2.length()); taskList.execute(() -> downloadSomeFile()); someButton.addActionListener( event -> handleButtonClick()); double d = MathUtils.integrate( x -> x*x, 0, 100, 1000);

№9 слайд
-выражение как переменная
Содержание слайда: λ-выражение как переменная AutoCloseable c = () -> cleanupForTryWithResources(); Thread.UncaughtExceptionHandler handler = (thread, exception) -> doSomethingAboutException(); Formattable f = (formatter,flags,width,precision) -> makeFormattedString(); ContentHandlerFactory fact = mimeType -> createContentHandlerForMimeType();

№10 слайд
Итоги упрощение синтаксиса
Содержание слайда: Итоги: упрощение синтаксиса Замена кода на код

№11 слайд
Пример Было Стало
Содержание слайда: Пример Было Стало

№12 слайд
Сортировка строк по длине
Содержание слайда: Сортировка строк по длине Было Стало

№13 слайд
Выведение типов В списке
Содержание слайда: Выведение типов В списке аргументов можно пренебречь указанием типов Общий вид λ-выражения (тип1 var1, тип2 var2 ...) -> { тело метода } λ-выражение с выведением типов (var1, var2 ...) -> { тело метода }

№14 слайд
Сортировка строк по длине
Содержание слайда: Сортировка строк по длине Было Стало

№15 слайд
Возвращаемое значение В теле
Содержание слайда: Возвращаемое значение В теле метода используйте выражение, а не блок. Значение выражения будет возвращено. Если тип возвращаемого значения void, то метод ничего не вернет. Было (var1, var2 ...) -> { return выражение } Стало (var1, var2 ...) -> выражение

№16 слайд
Сортировка строк по длине
Содержание слайда: Сортировка строк по длине Было Стало

№17 слайд
Скобки Если метод зависит от
Содержание слайда: Скобки Если метод зависит от одного аргумента, скобки можно опустить. В таком случае тип аргумента не указывается. Было Стало

№18 слайд
Новый синтаксис Было Стало
Содержание слайда: Новый синтаксис Было Стало

№19 слайд
Использование значений
Содержание слайда: Использование значений Лямбда-выражения могут ссылаться на переменные, которые не объявлены как final (но значение таким переменным можно присвоить только один раз) Такие переменные называются эффективно финальными (их можно корректно объявить как final) Также можно ссылаться на изменяемые переменные экземпляра: “this” в лямбда-выражении ссылается на главные класс (не вложенный, который создается для лямбда-выражения) Явное объявление Эффективно финальная переменная

№20 слайд
Аннотация Override Какой
Содержание слайда: Аннотация @Override Какой смысл использовать аннотацию @Override? Корректный код будет работать и без @Override, но @Override Отслеживает ошибки во время компиляции Описывает суть метода Сообщает остальным разработчикам, что данный метод из супер-класса, и в HttpServlet API описана его реализация

№21 слайд
Аннотация FunctionalInterface
Содержание слайда: Аннотация @FunctionalInterface Отслеживает ошибки во время компиляции Если разработчик добавит второй абстрактный метод в интерфейс, интерфейс не будет скомпилирован. Описывает суть интерфейса Сообщает остальным разработчикам, что данный интерфейс будет использоваться с лямбда-выражениями Аннотация не обязательна

№22 слайд
Пример. Численное
Содержание слайда: Пример. Численное интегрирование Обычное численное интегрирование методом средних прямоугольников

№23 слайд
Пример. Численное
Содержание слайда: Пример. Численное интегрирование Использовать лямбда-выражения для интегрируемой функции. Определить функциональный интерфейс с методом double eval(double x) для описания интегрируемой функции. Для проверки интерфейса во время компиляции и для объявления, что интерфейс функциональный и его можно использовать в лямбда-выражениях, используем аннотацию @FunctionalInterface

№24 слайд
Интерфейс Integrable
Содержание слайда: Интерфейс @Integrable

№25 слайд
Метод численного
Содержание слайда: Метод численного интегрирования

№26 слайд
Метод для тестирования
Содержание слайда: Метод для тестирования

№27 слайд
Тестирование
Содержание слайда: Тестирование

№28 слайд
Ссылка на методы Можно
Содержание слайда: Ссылка на методы Можно использовать ссылку ИмяКласса::имяСтатическогоМетода или имяПеременной::методЭкземпляраКласса в лямбда-выржениях Например, Math::cos или myVar::myMethod Это еще один способ задания функции, которая уже описана, в данном случае не нужно писать лямбда-выражение, вместо этого используйте ссылку на этот метод Функция должны соответствовать сигнатуре метода функционального интерфейса Тип определяется только из контекста

№29 слайд
Пример. Численное
Содержание слайда: Пример. Численное интегрирование

№30 слайд
Пакет java.util.function
Содержание слайда: Пакет java.util.function Такие интерфейсы как Integrable очень широко используются. Поэтому в Java 8 нужны интерфейсы с более общим названием, который можно применять в подобных случаях. Пакет java.util.function определяет множество простых функциональных (SAM) интерфейсов. Они называются согласно аргументам и возвращаемым значениям.

№31 слайд
Пакет java.util.function
Содержание слайда: Пакет java.util.function Например, можно заменить интерфейс Integrable на встроенный функциональный интерфейс DoubleUnaryOperator. Для того, чтобы узнать имя метода, нужно посмотреть API. Не смотря на то, что лямбда-выражения не ссылаются на имя метода, код, в котором используются лямбда-выражения должен ссылаться на соответствующие методы интерфейса.

№32 слайд
Типизированные и обобщенные
Содержание слайда: Типизированные и обобщенные интерфейсы Тип задан Примеры (существует множество других интерфейсов) 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>) с более широкой степенью применения

№33 слайд
Пример. Численное
Содержание слайда: Пример. Численное интегрирование

№34 слайд
Пример. Численное
Содержание слайда: Пример. Численное интегрирование

№35 слайд
Интерфейсы java.util.function
Содержание слайда: Интерфейсы java.util.function

№36 слайд
Общий случай
Содержание слайда: Общий случай

№37 слайд
Общий случай
Содержание слайда: Общий случай

№38 слайд
Интерфейс Predicate boolean
Содержание слайда: Интерфейс Predicate boolean test(T t) Позволяет задать «функцию» для проверки условия• Преимущество Позволяет искать по коллекции элементы, которые соответствуют условию, написать гораздо более краткий код, чем без лямбда-выражений Пример синтаксиса

№39 слайд
Пример. Без Predicate Поиск
Содержание слайда: Пример. Без Predicate Поиск сотрудника по имени

№40 слайд
Пример. Без Predicate Поиск
Содержание слайда: Пример. Без Predicate Поиск сотрудника по зарплате

№41 слайд
Рефакторинг Поиск первого
Содержание слайда: Рефакторинг 1 Поиск первого сотрудника, удовлетворяющего условию

№42 слайд
Рефакторинг . Преимущества
Содержание слайда: Рефакторинг 1. Преимущества Теперь можно передать различные функции для поиска по разным критериям. Код более краткий и понятный. Но код по-прежнему «привязан» к классу Employee

№43 слайд
Рефакторинг Поиск первого
Содержание слайда: Рефакторинг 2 Поиск первого сотрудника, удовлетворяющего условию

№44 слайд
Метод firstMatch
Содержание слайда: Метод firstMatch

№45 слайд
Метод firstMatch
Содержание слайда: Метод firstMatch

№46 слайд
Интерфейс Function R apply T
Содержание слайда: Интерфейс Function R apply(T t) Позволяет задать «функцию», которая принимает аргумент T и возвращает R. Интерфейс BiFunction работает аналогичным образом, но метод apply принимает два аргумента типа T. Преимущество Позволяет преобразовать значение или коллекцию значений, написать гораздо более краткий код, чем без лямбда-выражений

№47 слайд
Интерфейс Function Пример
Содержание слайда: Интерфейс Function Пример синтаксиса

№48 слайд
Пример. Без Function
Содержание слайда: Пример. Без Function Вычисление суммы зарплат сотрудников

№49 слайд
Пример. С Function Вычисление
Содержание слайда: Пример. С Function Вычисление суммы произвольных объектов

№50 слайд
Интерфейс BinaryOperator T
Содержание слайда: Интерфейс BinaryOperator T apply(T t1, T t2) Позволяет задать «функцию», которая принимает два аргумента T и возвращает T Синтаксис

№51 слайд
Применение BinaryOperator
Содержание слайда: Применение BinaryOperator Делает mapSum более гибкой Вместо mapSum(List<T> entries, Function<T, Integer> mapper) Можно обобщить ее, передав оператор (который был жестко задан в методе mapSum): mapCombined(List<T> entries, Function<T, R> mapper, BinaryOperator<R> combiner)

№52 слайд
Интерфейс Consumer void
Содержание слайда: Интерфейс Consumer void accept(T t) Позволяет задать «функцию», которая принимает аргумент T и выполняет некоторый побочный эффект Синтаксис

№53 слайд
Применение Consumer Во
Содержание слайда: Применение Consumer Во встроенном метода forEach класса Stream используется интерфейс Consumer employees.forEach( e -> e.setSalary(e.getSalary()*11/10)) values.forEach(System.out::println) textFields.forEach(field -> field.setText(""))

№54 слайд
Интерфейс Supplier T get
Содержание слайда: Интерфейс Supplier T get() Позволяет задать «функцию» без аргументов и возвращает T. и выполняет некоторый побочный эффект Синтаксис

№55 слайд
Область видимости переменных
Содержание слайда: Область видимости переменных Лямбда-выражения используют статические области действия переменных Выводы: Ключевое слово this ссылается на внешний класс, а не на анонимный (тот, в который преобразуется лямбда-выражение) Нет переменной OuterClass.this До тех пор, пока лямбда внутри вложенного класса Лямбда не может создавать новые переменные с такими же именами как у метода, вызвавшего лямбда Лямбда может ссылаться (но не изменять) локальные переменные из окружающего кода Лямбда может обращаться (и изменять) переменные экземпляра окружающего класса

№56 слайд
Примеры Ошибка повторное
Содержание слайда: Примеры Ошибка: повторное использование имени переменной 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);

№57 слайд
Примеры Изменение переменной
Содержание слайда: Примеры Изменение переменной экземпляра private double x = 1.2; public void foo() { someMethod(y -> x = 3.4);} Имя переменной в лямбда совпадает с именем переменной экземпляра private double x = 1.2; public void bar() { someMethod(x -> x + this.x); }

№58 слайд
Ссылка на методы Ссылки на
Содержание слайда: Ссылка на методы Ссылки на методы можно использовать в лямбда-выражениях. Если есть метод, сигнатура которого совпадает с сигнатурой абстрактного метода функционального интерфейса, можно использовать ссылку ИмяКласса::имяМетода.

№59 слайд
Ссылка на методы
Содержание слайда: Ссылка на методы

№60 слайд
Вызов метода экземпляра
Содержание слайда: Вызов метода экземпляра класса переменная::методЭкземпляраКласса Создает лямбда-выражение, которое принимает то количество аргументов, которое указано в методе. String test = "PREFIX:"; List<String> result1 = transform(strings, test::concat); Класс::методЭкземпляраКласса Создает лямбда-выражение, которое принимает на один аргумент больше, чем соответствующий метод. Первый аргумент – объект, от которого вызывается метод, остальные аргументы – параметры метода. List<String> result2= transform(strings,String::toUpperCase);

№61 слайд
Методы по умолчанию
Содержание слайда: Методы по умолчанию

№62 слайд
Исходный код Function
Содержание слайда: Исходный код Function

№63 слайд
Методы, возвращающие лямбда
Содержание слайда: Методы, возвращающие лямбда

№64 слайд
Методы интерфейса Predicate
Содержание слайда: Методы интерфейса Predicate

№65 слайд
Методы интерфейса Predicate
Содержание слайда: Методы интерфейса Predicate

№66 слайд
Пример
Содержание слайда: Пример

№67 слайд
Методы интерфейса Function
Содержание слайда: Методы интерфейса Function

№68 слайд
Цепочки функций
Содержание слайда: Цепочки функций

№69 слайд
Пример
Содержание слайда: Пример

№70 слайд
Пример
Содержание слайда: Пример

№71 слайд
Методы интерфейса Consumer
Содержание слайда: Методы интерфейса Consumer

№72 слайд
Пример
Содержание слайда: Пример

Скачать все slide презентации Современные технологии программирования. λ-выражения в Java 8. Функция как параметр одним архивом: