SlideShare uma empresa Scribd logo
1 de 99
Baixar para ler offline
Ole L t o
@oleglustenko
3е свидание c functional-js что дальше ?
3е свидание с
functional-js,
что дальше ?
Чего не будет на
этом докладе ?
purely functional front-end language
Чего не будет на этом докладе ?
purely functional front-end language
purely functional front-end language
Чего не будет на этом докладе ?
purely functional front-end language
purely functional front-end language
purely functional front-end language
Чего не будет на этом докладе ?
purely functional front-end language
functional front-end language
purely functional front-end language
purely functional front-end language
Чего не будет на этом докладе ?
Чего не будет на этом докладе ?
Чего не будет на этом докладе ?
Чего не будет на этом докладе ?
Redux
Чего не будет на этом докладе ?
Чего не будет на этом докладе ?
RxJs
RxJs
И его тоже не будет :)
- Частная имплементации
EventStream
RxJs
functional
programming
pure fp
- Нет циклов
pure fp
- Нет циклов
- Нет переменных
pure fp
- Нет циклов
- Нет переменных
- Нет мутабельности
pure fp
- Нет циклов
- Нет переменных
- Нет мутабельности
- Нет “Императивности”
pure fp
- Нет циклов
- Нет переменных
- Нет мутабельности
- Нет “Императивности”
--------------------------------
- null check ?
- callbacks ?
- errors ?
- side effects ?
pure fp
- Нет циклов
- Нет переменных
- Нет мутабельности
- Нет “Императивности”
- рекурсия
- функция как
переменная
- Иммутабельность
- “Декларативность”
- null
- errors
- callbacks
- side effects
daily job activities
Говорить мы будем о
Функторах и Монадах !
1. Re-think
1. Re-think
2. Re-load
1. Re-think
2. Re-load
3. Re-born
Пра-родители ФП
- композиция - compose
- каррирование - curry
curry
compose
real compose
compose
compose
compose
compose
compose
real compose
real compose
real compose
real compose
- null
daily job activities
- null
daily job activities
Re-think
1. Re-think
2. Re-load
3. Re-born
Объекты
Re-think Объекты
1. Объект это Контейнер/Wrapper для
значения
Re-think Объекты
1. Объект это Контейнер/Wrapper для
значения
2. Методы отсутствуют
Re-think Объекты
1. Объект это Контейнер/Wrapper для
значения
2. Методы отсутствуют
3. Не является существительным
Re-think Объекты
1. Объект это Контейнер/Wrapper для
значения
2. Методы отсутствуют
3. Не является существительным
4. Большинство Объектов за вас уже
“создано”
Фунтор
Объект или структура данных
к которой можно применить .map
interface:
method -> map
- null
daily job activities
Maybe Functor
- Проверку является ли значение null
- Значения внутри может не
существовать
- Иногда имеет 2 саб-класса
Just/Nothing или Some/None
Maybe Functor
- null
daily job activities
- null
daily job activities
- null
- errors
- callbacks
- side effects
daily job activities
Either(“Или”) Functor
- Обычно используется для
логирования ошибок
- Почти как Maybe Functor, вместо null
отдает сообщение об ошибке
- Имеет 2 саб-класса Left/Right
- .map работает с Right и игнорирует
Left
Either(“Или”) Functor
Either(“Или”) Functor
- null
- errors
- callbacks
- side effects
daily job activities
EventStream Functor
- Бесконечный список результатов
- Маппинг для ленивого обновления
данных
- Вызывает замапленную функцию
каждый раз при срабатывании
события
EventStream Functor
EventStream Functor
- null
- callbacks
- errors
- side effects
daily job activities
IO Functor
- “Конструктор” для ленивых
вычислений
- Обычно используется для side-effects
- Отложенный запуск только после
команды runIO
- .map - добавляет функцию в очередь,
выполняющуюся при runIO
IO Functor
IO Functor
IO Functor
IO Functor
IO Functor
- null
- callbacks
- errors
- side effects
daily job activities
Задача: Получить Название улицы пользователя
Monads
Монада
“Для вложенных вычислений”
Monad interface:
method -> mjoin
method -> chain
Pointed Functor + mjoin|chain = Monad
Pointed Functor interface:
method -> of
of :: value -> Functor(value)
Монада
mjoin :: M M a -> M a
Монада
mjoin :: M M a -> M a
Монада
Монада
Re-born
[x].map(f) // [f(x)]
Maybe(x).attempt(f) // Maybe(f(x))
Promise(x).then(f) // Promise(f(x))
EventStream(x).subscribe(f) // EventStream(f(x))
Разные имена:
map(f, [x]) // [f(x)]
map(f, Maybe(x)) // Maybe(f(x))
map(f, Promise(x)) // Promise(f(x))
map(f, EventStream(x)) // EventStream(f(x))
Мы видим, что это map
Re-born
FP - structures
Библиотеки имплементирующие API
Благодарю за внимание
@oleglustenko

Mais conteúdo relacionado

Semelhante a 3-е свидание с functional-js, что дальше

Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Ontico
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
SentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaSentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaDmitry Kan
 
Functional reactive full stack development in java/js (JPoint ed.)
Functional reactive full stack development in java/js (JPoint ed.)Functional reactive full stack development in java/js (JPoint ed.)
Functional reactive full stack development in java/js (JPoint ed.)Vyacheslav Lapin
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программированияITCP Community
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArtDataArt
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиSQALab
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"QA Dnepropetrovsk Community (Ukraine)
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) it-people
 

Semelhante a 3-е свидание с functional-js, что дальше (20)

Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
 
Gen server
Gen serverGen server
Gen server
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...Database First! О распространённых ошибках использования РСУБД / Николай Само...
Database First! О распространённых ошибках использования РСУБД / Николай Само...
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Fragments&Loaders
Fragments&LoadersFragments&Loaders
Fragments&Loaders
 
SentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social mediaSentiScan: система автоматической разметки тональности в social media
SentiScan: система автоматической разметки тональности в social media
 
Functional reactive full stack development in java/js (JPoint ed.)
Functional reactive full stack development in java/js (JPoint ed.)Functional reactive full stack development in java/js (JPoint ed.)
Functional reactive full stack development in java/js (JPoint ed.)
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Power of LINQ
Power of LINQPower of LINQ
Power of LINQ
 
Rx android
Rx androidRx android
Rx android
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
 
Testing mistakes
Testing mistakesTesting mistakes
Testing mistakes
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 
Discovering Lambdas (Speech)
Discovering Lambdas (Speech)Discovering Lambdas (Speech)
Discovering Lambdas (Speech)
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
 

Mais de Artjoker

Is it time to write unit tests?
Is it time to write unit tests?Is it time to write unit tests?
Is it time to write unit tests?Artjoker
 
Redux and React. Learning from giants.
Redux and React. Learning from giants.Redux and React. Learning from giants.
Redux and React. Learning from giants.Artjoker
 
MVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERMVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERArtjoker
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"Artjoker
 
«Let`s do it right»
«Let`s do it right»«Let`s do it right»
«Let`s do it right»Artjoker
 
«Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» «Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» Artjoker
 
GraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаGraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаArtjoker
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyondArtjoker
 
Первые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыПервые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыArtjoker
 
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»Artjoker
 
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» «Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» Artjoker
 
«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»Artjoker
 
QA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаQA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаArtjoker
 
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsQA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsArtjoker
 
QA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternQA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternArtjoker
 
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Artjoker
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningArtjoker
 
Performance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowPerformance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowArtjoker
 
Productivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsProductivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsArtjoker
 
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Artjoker
 

Mais de Artjoker (20)

Is it time to write unit tests?
Is it time to write unit tests?Is it time to write unit tests?
Is it time to write unit tests?
 
Redux and React. Learning from giants.
Redux and React. Learning from giants.Redux and React. Learning from giants.
Redux and React. Learning from giants.
 
MVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPERMVVM+Router or how to use all advantage from MVVM and VIPER
MVVM+Router or how to use all advantage from MVVM and VIPER
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
 
«Let`s do it right»
«Let`s do it right»«Let`s do it right»
«Let`s do it right»
 
«Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов» «Высоконагруженное тестирование РНР проектов»
«Высоконагруженное тестирование РНР проектов»
 
GraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчикаGraphQL для FrontEnd разработчика
GraphQL для FrontEnd разработчика
 
React 16: new features and beyond
React 16: new features and beyondReact 16: new features and beyond
React 16: new features and beyond
 
Первые шаги интернет-магазина одежды
Первые шаги интернет-магазина одеждыПервые шаги интернет-магазина одежды
Первые шаги интернет-магазина одежды
 
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
«Без каких микровзаимодействий нельзя делать WEB и mobile продукты в 2018-м»
 
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга» «Эмоциональный веб-дизайн, история одного чуткого лендинга»
«Эмоциональный веб-дизайн, история одного чуткого лендинга»
 
«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»«Дизайн система для мобильных и веб проектов»
«Дизайн система для мобильных и веб проектов»
 
QA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейсаQA Evening Марк Курченко - Чек-лист против тест-кейса
QA Evening Марк Курченко - Чек-лист против тест-кейса
 
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & MeasurementsQA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
QA Evening Игорь Колосов - Performance Testing: Metrics & Measurements
 
QA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State PatternQA Evening Максим Колотилкин - Test State Pattern
QA Evening Максим Колотилкин - Test State Pattern
 
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
Меликян Артём (Team Lead of SEO Classifieds, Netpeak) Продвижение крупных про...
 
Клуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps EveningКлуб Большого мозга - DevOps Evening
Клуб Большого мозга - DevOps Evening
 
Performance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshowPerformance: How to build an app instead of slideshow
Performance: How to build an app instead of slideshow
 
Productivity Hero. Know Your Tools
Productivity Hero. Know Your ToolsProductivity Hero. Know Your Tools
Productivity Hero. Know Your Tools
 
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
Мобильная разработка. Между Сциллой и Харибдой. Native, hybrid or cross platf...
 

3-е свидание с functional-js, что дальше