Читать книгу Programowanie funkcyjne w języku C#. Jak pisać lepszy kod - Enrico Buonanno - Страница 22

1.3.1 Funkcje jako odwzorowania

Оглавление

W matematyce funkcja jest odwzorowaniem między dwoma zbiorami, odpowiednio nazywanych dziedziną oraz przeciwdziedziną. Danemu elementowi z jej dziedziny funkcja przypisuje element z jej przeciwdziedziny. I to wszystko – nie ma znaczenia, czy odwzorowanie opiera się na wzorach, czy jest całkowicie arbitralne.

W tym sensie funkcja jest całkowicie abstrakcyjnym obiektem matematycznym, a wartość podawana przez funkcję jest określana wyłącznie przez jej wejście. Zobaczymy, że w programowaniu nie zawsze tak się dzieje.

Wyobraźmy sobie na przykład funkcję, która odwzorowuje małe litery na ich wielkie odpowiedniki, jak to pokazano na rysunku 1.3. W tym przypadku dziedziną jest zbiór {a, b, c, ...}, a przeciwdziedziną zbiór {A, B, C, ...}. (Oczywiście istnieją funkcje, których dziedzina i przeciwdziedzina są tym samym zbiorem. Pewnie możecie podać taki przykład).

Jak się to ma do funkcji w programowaniu? W językach statystycznie typowanych takich jak C# zbiory (dziedzina i przeciwdziedzina) są reprezentowane przez typy. Na przykład jeśli zakodujemy powyższą funkcję, zobaczymy, że możemy użyć typu char do reprezentowania zarówno dziedziny, jak i przeciwdziedziny. Typ naszej funkcji możemy zapisać tak:

char → char

Jest to funkcja, która odwzorowuje char na char, czyli inaczej to ujmując, otrzymuje char i daje w wyniku char.

Typy dziedziny i przeciwdziedziny składają się na interfejs funkcji, czyli jej typ lub inaczej sygnaturę. Możemy traktować to jako kontrakt: sygnatura funkcji deklaruje, że mając element z dziedziny, otrzymamy element z przeciwdziedziny3. Może się to wydawać oczywiste, ale jak zobaczymy w rozdziale 3, w rzeczywistości naruszenia sygnatury zdarzają się nagminnie.


Rysunek 1.3 Funkcja matematyczna odwzorowuje na siebie elementy z dwóch zbiorów

Popatrzmy teraz na sposoby kodowania samych funkcji.

Programowanie funkcyjne w języku C#. Jak pisać lepszy kod

Подняться наверх