1 Презентация функциональное программирование
TRANSCRIPT
![Page 1: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/1.jpg)
Click to add text
Функциональное программирование
![Page 2: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/2.jpg)
Основные принципы
1) Чистые функции - процесс вычисления представляет собой вычисление
значения функции(причем в математическом смысле) т. е без сайд-эффекта.
2) Функции высших порядков- можно оперировать не только объектами, но
и исполняемым кодом
3) Лямбда - можна объявить анонимную ф-цию в любом месте программы
4) Иммутабельность - созданный объект не может быть изменен, никогда
![Page 3: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/3.jpg)
Retrolambda
![Page 4: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/4.jpg)
Retrolambda
![Page 5: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/5.jpg)
Click to add text
Лямбда выражения
![Page 6: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/6.jpg)
Лямбда выражения
![Page 7: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/7.jpg)
Выполнение блока кода
![Page 8: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/8.jpg)
Лямбда без параметров
![Page 9: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/9.jpg)
Лямбда с несколькими параметрами
![Page 10: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/10.jpg)
Просто диалог 21 строчка
![Page 11: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/11.jpg)
Просто диалог 6 строчек
![Page 12: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/12.jpg)
Функциональные интерфейсы
![Page 13: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/13.jpg)
Функции операторы
![Page 14: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/14.jpg)
Функции высших порядков за работой
![Page 15: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/15.jpg)
Больше примеров
![Page 16: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/16.jpg)
Императивная версия
![Page 17: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/17.jpg)
Удачной отладки)
![Page 18: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/18.jpg)
Stream Api
![Page 19: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/19.jpg)
Какой метод писался больше 2 минут?
![Page 20: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/20.jpg)
Lightweight-Stream-Api
• Functional interfaces (Supplier, Function, Consumer etc);• Stream/IntStream/LongStream/DoubleStream (without parallel
processing, but with a variety of additional methods and with custom operators);• Optional/OptionalInt/OptionalLong/OptionalDouble classes;• Exceptional class - functional way to deal with exceptions;• Objects from Java 7.
![Page 21: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/21.jpg)
Stream Api Создание• Stream.of(/* array | list | set | map | anything based on
Iterator/Iterable interface */) • Stream.of(value1, value2, value3)…• Stream.generate(new Random()::nextDouble).limit(10))• +Bonus IntStream, DoubleStream, LongStream• IntStream.range(0, 10)…
![Page 22: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/22.jpg)
Stream Api Промежуточные функции
• filter(Predicate p)
• map(Function f)
• peek(Consumer c)
• limit(long max)
• skip(long n)
• distinct()
• sorted() / sorted(Comparator c)
• flatMap(Function f)
![Page 23: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/23.jpg)
Stream Api Терминальные функции• collect(Collector c)
• forEach(Consumer c)
• findFirst()
• anyMatch(Predicate p), allMatch(Predicate p),
• noneMatch(Predicate p)
• flatMap(Function f)
• reduce(BiFunction f)
• count()
• min(Comparator c) / max(Comparator c)
![Page 24: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/24.jpg)
Неизменяемые классы• легко конструировать, тестировать и использовать
• автоматически потокобезопасны и не имеют проблем синхронизации
• не требуют конструктора копирования
• позволяют выполнить «ленивую инициализацию» хэш кода и кэшировать возвращаемое значение
• не требуют защищенного копирования, когда используются как поле
• делают хорошие Map ключи и Set элементы (эти объекты не должны менять состояние, когда находятся в
коллекции)
• делают свой класс постоянным, единожды создав его, а он не нуждается в повторной проверке
• всегда имеют «атомарность по отношению к сбою» (failure atomicity): если неизменяемый объект бросает
исключение, он никогда не останется в нежелательном или неопределенном состоянии. Исключение если такие
возможны, будут возникать еще до создания объекта, Но невалидных объектов среди созданных быть не может.
![Page 25: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/25.jpg)
Куда пропали геттеры?
![Page 26: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/26.jpg)
Stream Api продолжение
![Page 27: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/27.jpg)
Повышаем градус
![Page 28: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/28.jpg)
Императивный ужас в прошлом
![Page 29: 1 Презентация функциональное программирование](https://reader035.vdocuments.site/reader035/viewer/2022062904/588990531a28ab330e8b5115/html5/thumbnails/29.jpg)
Click to add text