1 Презентация функциональное программирование

29
Click to add Функциональное программирование

Upload: step-computer-academy-zaporozhye

Post on 14-Apr-2017

72 views

Category:

Education


2 download

TRANSCRIPT

Page 1: 1 Презентация функциональное программирование

Click to add text

Функциональное программирование

Page 2: 1 Презентация функциональное программирование

Основные принципы

1) Чистые функции - процесс вычисления представляет собой вычисление

значения  функции(причем в математическом смысле) т. е без сайд-эффекта.

2) Функции высших порядков- можно оперировать не только объектами, но

и исполняемым кодом

3) Лямбда - можна объявить анонимную ф-цию в любом месте программы

4) Иммутабельность - созданный объект не может быть изменен, никогда

Page 3: 1 Презентация функциональное программирование

Retrolambda

Page 4: 1 Презентация функциональное программирование

Retrolambda

Page 5: 1 Презентация функциональное программирование

Click to add text

Лямбда выражения

Page 6: 1 Презентация функциональное программирование

Лямбда выражения

Page 7: 1 Презентация функциональное программирование

Выполнение блока кода

Page 8: 1 Презентация функциональное программирование

Лямбда без параметров

Page 9: 1 Презентация функциональное программирование

Лямбда с несколькими параметрами

Page 10: 1 Презентация функциональное программирование

Просто диалог                               21 строчка

Page 11: 1 Презентация функциональное программирование

Просто диалог                               6 строчек

Page 12: 1 Презентация функциональное программирование

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

Page 13: 1 Презентация функциональное программирование

Функции операторы

Page 14: 1 Презентация функциональное программирование

Функции высших порядков за работой

Page 15: 1 Презентация функциональное программирование

Больше примеров

Page 16: 1 Презентация функциональное программирование

Императивная версия

Page 17: 1 Презентация функциональное программирование

Удачной отладки)

Page 18: 1 Презентация функциональное программирование

Stream Api

Page 19: 1 Презентация функциональное программирование

Какой метод писался больше 2 минут?

Page 20: 1 Презентация функциональное программирование

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 Презентация функциональное программирование

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 Презентация функциональное программирование

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 Презентация функциональное программирование

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 Презентация функциональное программирование

Неизменяемые  классы• легко конструировать, тестировать и использовать

• автоматически потокобезопасны и не имеют проблем синхронизации

• не требуют конструктора копирования

• позволяют выполнить «ленивую инициализацию» хэш кода и кэшировать возвращаемое значение

• не требуют защищенного копирования, когда используются как поле

• делают хорошие Map ключи и Set элементы (эти объекты не должны менять состояние, когда находятся в

коллекции)

• делают свой класс постоянным, единожды создав его, а он не нуждается в повторной проверке

• всегда имеют «атомарность по отношению к сбою» (failure atomicity): если неизменяемый объект бросает

исключение, он никогда не останется в нежелательном или неопределенном состоянии. Исключение  если такие

возможны, будут возникать еще до создания объекта, Но невалидных объектов среди созданных быть не может.

Page 25: 1 Презентация функциональное программирование

Куда пропали геттеры?

Page 26: 1 Презентация функциональное программирование

Stream Api продолжение

Page 27: 1 Презентация функциональное программирование

Повышаем градус

Page 28: 1 Презентация функциональное программирование

Императивный ужас в прошлом

Page 29: 1 Презентация функциональное программирование

Click to add text