Українська
Підсумки
Висновки
Функціональний тип описує параметри й результат функції, яку можна зберегти, передати або повернути, а лямбди й посилання на функції створюють такі значення. Замикання захоплює змінні оточення, тому захоплений var робить порядок викликів частиною поведінки. inline підставляє тіло функції та лямбд у місце виклику, дозволяючи нелокальне повернення, а noinline і crossinline обмежують цю підстановку. Лямбди з приймачем лежать в основі будівників, а функції області видимості let, run, with, apply і also відрізняються приймачем і результатом. Операції map, filter, any, firstOrNull і sumOf виражають перетворення, відбір та агрегування без ручного циклу. groupBy, associateBy, partition і fold мають власну політику повторних ключів і порожніх даних, яку обирають свідомо. Послідовності обробляють елементи ліниво й дозволяють раннє завершення, але не завжди швидші за списки. Вибір між циклом, операціями колекцій і послідовністю залежить від задачі, а кожен варіант перевіряють на порожньому наборі, повторних ключах і межах числових типів.
Питання для самоперевірки
- Як відрізняються nullable-функція й nullable-результат?
- Що повертає лямбда без явного return?
- Коли явне ім’я краще за it?
- Чому замикання може зберігати стан після завершення фабрики?
- Що означає
return@forEach? - Чим crossinline відрізняється від noinline?
- Які функції області видимості повертають сам об’єкт?
- Чим groupBy відрізняється від associateBy?
- Чому fold безпечніший за reduce для порожніх даних?
- Які операції послідовності потребують усіх елементів?
- Чому повторний обхід може повторити побічні ефекти?
- Коли функціональний інтерфейс кращий за typealias?