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

Post on 14-Apr-2017

53 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Click to add text

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

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

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

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

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

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

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

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

Retrolambda

Retrolambda

Click to add text

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

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

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

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

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

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

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

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

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

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

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

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

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

Stream Api

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

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.

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)…

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) 

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) 

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

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

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

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

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

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

коллекции)

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

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

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

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

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

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

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

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

Click to add text

top related