SlideShare a Scribd company logo
Click to add tex
Функциональное программирование
Основные принципы
1) Чистые функции - процесс вычисления представляет собой вычисление
значения функции(причем в математическом смысле) т. е без сайд-эффекта.
2) Функции высших порядков- можно оперировать не только объектами, но и
исполняемым кодом
3) Лямбда - можна объявить анонимную ф-цию в любом месте программы
4) Иммутабельность - созданный объект не может быть изменен, никогда
Retrolambda
Retrolambda
Click to add tex
Лямбда выражения
Лямбда выражения
Выполнение блока кода
Лямбда без параметров
Лямбда с несколькими параметрами
Просто диалог 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 tex

More Related Content

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

Team workflow
Team workflowTeam workflow
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
Dmitri Soshnikov
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
Sergey Staroletov
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel Computing
Andrii Rodionov
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
m2rus
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
Igor Shkulipa
 
Functional
FunctionalFunctional
Functional
Andrey Volobuev
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
Alexander Lisachenko
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
Dmytro Chyzhykov
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
Anastasia Snegina
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
Anastasia Snegina
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
Igor Shkulipa
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
Alexander Gornik
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
_ymn
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
Ontico
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
Anton Ignatov
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
mikhailshurgulaya
 

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

Team workflow
Team workflowTeam workflow
Team workflow
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel Computing
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Functional
FunctionalFunctional
Functional
 
Aspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHPAspect-Oriented Programming in PHP
Aspect-Oriented Programming in PHP
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
 
вопросы к зачетупп
вопросы к зачетуппвопросы к зачетупп
вопросы к зачетупп
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
 
Виталий Каторгин, Wamba
Виталий Каторгин, WambaВиталий Каторгин, Wamba
Виталий Каторгин, Wamba
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 

More from STEP Computer Academy (Zaporozhye)

X-Lab презентация
X-Lab презентацияX-Lab презентация
X-Lab презентация
STEP Computer Academy (Zaporozhye)
 
Service workers
Service workersService workers
PWA: Progressive Web Application
PWA: Progressive Web ApplicationPWA: Progressive Web Application
PWA: Progressive Web Application
STEP Computer Academy (Zaporozhye)
 
Node .js microservices
Node .js microservices Node .js microservices
Node .js microservices
STEP Computer Academy (Zaporozhye)
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
STEP Computer Academy (Zaporozhye)
 
Парсер: что? зачем? как?
Парсер: что? зачем? как?Парсер: что? зачем? как?
Парсер: что? зачем? как?
STEP Computer Academy (Zaporozhye)
 
Путь UI developer. От «Белого» пояса к «черному»
Путь UI developer. От «Белого» пояса к «черному»Путь UI developer. От «Белого» пояса к «черному»
Путь UI developer. От «Белого» пояса к «черному»
STEP Computer Academy (Zaporozhye)
 
Html5 canvas и электронный документооборот
Html5 canvas и электронный документооборотHtml5 canvas и электронный документооборот
Html5 canvas и электронный документооборот
STEP Computer Academy (Zaporozhye)
 
Golden Byte 2016
Golden Byte 2016Golden Byte 2016
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В. Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
STEP Computer Academy (Zaporozhye)
 
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
STEP Computer Academy (Zaporozhye)
 
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
STEP Computer Academy (Zaporozhye)
 
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
STEP Computer Academy (Zaporozhye)
 
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А. Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
STEP Computer Academy (Zaporozhye)
 
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю. Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
STEP Computer Academy (Zaporozhye)
 
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
STEP Computer Academy (Zaporozhye)
 

More from STEP Computer Academy (Zaporozhye) (16)

X-Lab презентация
X-Lab презентацияX-Lab презентация
X-Lab презентация
 
Service workers
Service workersService workers
Service workers
 
PWA: Progressive Web Application
PWA: Progressive Web ApplicationPWA: Progressive Web Application
PWA: Progressive Web Application
 
Node .js microservices
Node .js microservices Node .js microservices
Node .js microservices
 
Framework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs ChaliceFramework Battle: Django vs Flask vs Chalice
Framework Battle: Django vs Flask vs Chalice
 
Парсер: что? зачем? как?
Парсер: что? зачем? как?Парсер: что? зачем? как?
Парсер: что? зачем? как?
 
Путь UI developer. От «Белого» пояса к «черному»
Путь UI developer. От «Белого» пояса к «черному»Путь UI developer. От «Белого» пояса к «черному»
Путь UI developer. От «Белого» пояса к «черному»
 
Html5 canvas и электронный документооборот
Html5 canvas и электронный документооборотHtml5 canvas и электронный документооборот
Html5 canvas и электронный документооборот
 
Golden Byte 2016
Golden Byte 2016Golden Byte 2016
Golden Byte 2016
 
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В. Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
Дипломная работа ЗФКА "ШАГ" (2015) - Хетагуров М. В.
 
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
Дипломная работа ЗФКА "ШАГ" (2015) - Торба А.С.
 
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
Дипломная работа ЗФКА "ШАГ" 2015) - Пантилимонова Е.И.
 
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
Дипломный проект ЗФКА "ШАГ" (2015) - Ищенко А.С.
 
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А. Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
Дипломная работа ЗФКА "ШАГ" (2015) - Жучков С.А.
 
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю. Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
Дипломная работа "ЗФКА "ШАГ" (2015) - Есина Ю.Ю.
 
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
Урок 3Ds Max - полустационар "Компьютерная графика и дизайн" в КА "ШАГ"
 

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