> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Як 🍦 функціональне програмування не хотів вчити
- URL: https://www.rozhkov.me/how-i-learned-functional-programming/
- Published: 2022-12-16T11:00:00.000Z
- Updated: 2022-12-20T17:02:32.000Z
- Author: Vova Rozhkov
- Tags: робота, кулсторі

Після першої своєї роботи — кривавого ентерпрайзу, я влаштувався у стартап. Там ми взяли нову тоді 8-у джаву та мікросервіси, все як має бути.

В мене був колега, який вже працював з 8-ою версією та вмів писати лямбди. Я ж зупинився на 6-ій і лямбди не вмів.

Для тих хто не з Java світу, лямбди та стріми це такі шматочки функціонального програмування які додали якраз у 8-ій версії. `map()`, `forEach()`, `filter()`, `reduce()`, `find()` і так далі.

Оцей мій колега всюди де була можливість, використовував стріми та лямбди. А я ними користуватися не міг, не розумів як працює і що робить `map()`, тому писав все на циклах.

Деякий час у нас були заруби на код-рев'ю, колега хотів щоб я переписав все на стрімах, а я навпаки — хотів, щоб він прибрав `parallelStream()` для кращої читаємості.

Мій варіант

```java
List<Order> pendingOrders = new ArrayList<>(1);
for (Order order: customer.orders()) {
    if (order.isPending()) {
        pendingOrders.add(order);
    }
}
```

Його варіант

```
List<Order> pendingOrders = customer.orders()
    .stream()
    .filter(Order::isPending)
    .collect(toList());
```

Приклад з голови взяв, ну от ми й влаштовували заруби. А причина була одна — я не розумів ті лямбди. Тут ще просто написано, але коли якісь мапи туди сюди я дивився на код і не відстрілював що відбувається. Визнавати то я не хотів, новим трюкам вчитися не хотів, вмикав луддита і писав циклами.

З часом, з роками, я призвичаївся до тієї функціональщини та став її використовувати практично постійно. Перетворився на свого опонента. Але якихось зусиль для того не додавав, і даремно!

Якби я витратив трохи часу на навчання, подвився б відос, прослухав би курс, прочитав доку, то моя робота стала ефективнішою, а взаємодія у команді кращою. Олексій, будеш це читати — визнаю свою помилку😪

Тому не будьте як я. Маєте можливість на роботі вивчити щось нове — користуйтеся цим☝️

*Це вже не кажучи про те що концепти функціонального програмування повинен знати кожен програміст.*