Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Здравствуйте, меня зовут Роман и я
люблю функциональное
программирование
1
2
3
4
5
Функциональные принципы на примере LINQ
var adminNames = users
.Where(x => x.Group == Group.Admin)
.Select(x => x.Name);
6
Функциональные принципы на примере LINQ
var adminNames = users
.Where(x => x.Group == Group.Admin)
.Select(x => x.Name);
• Иммутабельность - в результате операции мы не изменяем существующий
объект, а создаем новый.
7
Функциональные принципы на примере LINQ
var adminNames = users
.Where(x => x.Group == Group.Admin)
.Select(x => x.Name);
• Иммутабельность - в результате операции мы не изменяем существующий
объект, а создаем новый.
• Функции первого порядка – LINQ-методы принимают в качестве параметров
функции.
8
Функциональные принципы на примере LINQ
var adminNames = users
.Where(x => x.Group == Group.Admin)
.Select(x => x.Name);
• Иммутабельность - в результате операции мы не изменяем существующий
объект, а создаем новый.
• Функции первого порядка – LINQ-методы принимают в качестве параметров
функции.
• Прозрачность – при вызове методов с одинаковыми данными мы получаем
одинаковый результат.
9
10
Получаем пользу от
параметризации действий
Функциональная «Стратегия»
11
12
А как бы вы реализовали это в
функциональном стиле?
Функциональная «Стратегия»
13
14
А существуют какие-нибудь паттерны
функционального программирования?
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
25
Учим сигнатуры говорить правду,
только правду и ничего кроме правды!
Полнота функций
26
Вопрос : что возвращает эта функция?
Полнота функций
27
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
Полнота функций
28
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
или null…
Полнота функций
29
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
или null…
а может упасть исключение…
Полнота функций : Maybe (оно же Option)
30
Полнота функций : Maybe (оно же Option)
31
Полнота функций : класс Result
32
Полнота функций : класс Result
33
Боремся за простоту,
последовательность и мир во всем мире
Цепочка продолжений
35
Цепочка продолжений
36
Цепочка продолжений
37
Цепочка продолжений
38
Цепочка продолжений
39
Цепочка продолжений : снова Result
40
41
Делаем Result немного полезней, а
обработку ошибок – проще и понятнее.
Продолжения во благо валидации
Продолжения во благо валидации
Продолжения во благо валидации
Продолжения во благо валидации
Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»
47
А если жуть как хочется добавить,
например, логгирование?
48
49
https://github.com/louthy/language-ext
Tomas Petricek & Jon Skeet
Real-World Functional Programming: With
Examples in F# and C#
a.co/3wDvJVa
Что бы такого почитать про эту вашу функциональщину?
Но вообще, это все – только начало.
Когда-нибудь мы с вами посмотрим на
еще более веселые штуки.
Спасибо за внимание!
nevoroman@gmail.com
nevoroman
nevoroman

More Related Content

Роман Неволин «Функциональные трюки для вашего объектно-ориентированного кода»