# Higher-Order Functions 

Про Higher-Order Functions можно почитать [тут](/2%20ComputerScience/2.2%20Languages/2.2.2%20Paradigm/2.2.2.1%20Declarative/2.2.2.1.1%20FunctionalProgramming(FP).md).

> ❗ Higher-Order Functions - оперируют функциями (принимают их в качестве аргументов)

| Функция          | Возвращает значение?   | Используется для? |
|------------------|------------------------|-------------------|
| `map(_:)`       | ✅ Да (новая коллекция) | Преобразования каждого элемента |
| `compactMap(_:)`| ✅ Да (новая коллекция)| Удаления `nil` и преобразования значений |
| `flatMap(_:)`   | ✅ Да (новая коллекция) | Всегда возвращает только одномерный массив |
| `filter(_:)`    | ✅ Да (новая коллекция) | Фильтрации элементов по условию |
| `reduce(_:_:)`  | ✅ Да (одно значение)   | Сведения всех элементов в одно значение |
| `forEach(_:)`   | ❌ Нет (Void)           | Выполнения действия для каждого элемента 

Пример на понимание: 

```swift
let matrix = [[1, 2], nil, [3, 4], [nil, 5], nil]

print(matrix.map { $0 }.count) // 5
print(matrix.compactMap { $0 }) // [[Optional(1), Optional(2)], [Optional(3), Optional(4)], [nil, Optional(5)]]
print(matrix.flatMap { $0 }) // [[Optional(1), Optional(2)], [Optional(3), Optional(4)], [nil, Optional(5)]]
print(matrix.compactMap { $0 }.flatMap { $0 }) // [Optional(1), Optional(2), Optional(3), Optional(4), nil, Optional(5)]
```

---

[5.3.1.4.4.3 Tuple Theme](./5.3.1.4.4.3%20Tuple.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) | [5.3.2 Data Structures Theme Folder](/5%20Swift/5.3%20DataRepresentations/5.3.2%20DataStructures/)