#SECONRU
Функциональный C#
Роман Неволин
Software Engineer, EPAM Systems
21-22 АПРЕЛЯ | ПЕНЗА
2
3
Когда C# разработчики сталкиваются с
функциональщиной?
4
Когда C# разработчики сталкиваются с
функциональщиной?
На самом деле постоянно. Но самый
привычный пример – это LINQ
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
Wow, hardcoded data!
Функциональные принципы : параметризируем все
12
Функциональные принципы : параметризируем все
13
Функциональные принципы : параметризируем все
14
Функциональная «Стратегия»
15
16
А как бы вы реализовали это в
функциональном стиле?
Функциональная «Стратегия»
17
18
А существуют какие-нибудь паттерны
функционального программирования?
29
Полнота функций
Полнота функций
30
Вопрос : что возвращает эта функция?
Полнота функций
31
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
Полнота функций
32
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
или null…
Полнота функций
33
Вопрос : что возвращает эта функция?
Ответ : список пользователей, конечно!
или null…
а может упасть исключение…
Полнота функций : класс Result
34
Полнота функций : класс Result
35
Цепочка продолжений
Во славу Сатаны
Цепочка продолжений
Во славу Сатаны
Цепочка продолжений
Во славу Сатаны
добра
Цепочка продолжений
39
Цепочка продолжений
40
Цепочка продолжений
41
Цепочка продолжений
42
Цепочка продолжений
43
Цепочка продолжений
44
Цепочка продолжений
45
Цепочка продолжений : снова Result
46
Цепочка продолжений : снова Result
47
Продолжения во благо валидации
Продолжения во благо валидации
Продолжения во благо валидации
Продолжения во благо валидации
Продолжения во благо валидации
Демо : рефакторим enterprise код
с использованием функциональных
принципов
Роман Неволин
Software Engineer, EPAM Systems
nevoroman@gmail.com
8 961 800-87-95
56

SECON'2017, Неволин Роман, Функциональный C#