Читать книгу Programowanie funkcyjne w języku C#. Jak pisać lepszy kod - Enrico Buonanno - Страница 14
1.1.1 Funkcje jako elementy pierwszoklasowe
ОглавлениеW języku, w którym funkcje są elementami pierwszoklasowymi, możemy używać ich jako parametrów wejściowych lub wartości zwracanych do innych funkcji. Możemy przypisywać je zmiennym i trzymać je w kolekcjach. Innymi słowy, jesteśmy w stanie wykonywać na funkcjach wszystkie działania, które można wykonywać z dowolnego innego typu.
Napiszmy na przykład w REPL następujący kod1:
Func<int, int> triple = x => x * 3;
var range = Enumerable.Range(1, 3);
var triples = range.Select(triple);
triples // => [3, 6, 9]
W tym przykładzie zaczynamy od deklaracji funkcji, która zwraca potrojoną wartość danej liczby całkowitej i przypisuje ją zmiennej o nazwie triple. Potem używamy Range w celu utworzenia IEnumerable<int> z wartościami [1, 2, 3]. Następnie wywołujemy Select (metodę rozszerzającą dla IEnumerable), podając jej jako argumenty zakres oraz funkcję triple. Tworzy to nową kolekcję IEnumerable zawierającą elementy otrzymane przez zastosowanie funkcji triple na każdym elemencie z wejściowego zakresu.
Ten krótki fragment pokazuje, że funkcje w języku C# są w istocie elementami pierwszoklasowymi, gdyż możemy przypisać funkcję mnożenia przez 3 do zmiennej triple, przekazując ją jako argument do metody Select. W całej książce zobaczymy, że traktowanie funkcji jak wartości pozwala nam pisać mocny i zwięzły kod.