.. _Wprowadzenie:
Wprowadzenie
------------------------------------------
Programowanie funkcyjne to paradygmat, w którym centralną rolę odgrywają funkcje – nie tylko jako bloki kodu wykonujące operacje, ale jako wartości, które można przekazywać, komponować i zwracać. W przeciwieństwie do programowania imperatywnego, gdzie nacisk kładzie się na zmianę stanu i wykonywanie kolejnych instrukcji, styl funkcyjny koncentruje się na wyrażaniu obliczeń jako przekształceń danych za pomocą funkcji. Pozwala to budować kod bardziej zwięzły, deklaratywny i często łatwiejszy do testowania.
Przykładem prostej może być ta poniżej, generująca element SVG – np. prostokąt:
.. code-block:: python
:linenos:
def draw_rect(x, y, width, height):
return f''
Taka funkcja nie modyfikuje żadnego stanu zewnętrznego – po prostu przekształca dane wejściowe w ciąg znaków. Jej działanie jest w pełni przewidywalne: dla tych samych argumentów zawsze zwróci ten sam wynik.
Programowanie funkcyjne pozwala także tworzyć **funkcje zwracające inne funkcje**, co umożliwia konstruowanie bardziej elastycznego i wielokrotnie używalnego kodu. Na przykład możemy zdefiniować funkcję, która tworzy "generator" prostokątów z określonym kolorem:
.. code-block:: python
:linenos:
def make_colored_rect(color):
def rect(x, y, width, height):
return f''
return rect
W ten sposób możemy utworzyć ``blue_rect = make_colored_rect("blue")``, a następnie wywołać ``blue_rect(10, 20, 100, 50)``, co da odpowiedni kod SVG z wypełnieniem w kolorze niebieskim. Tego typu konstrukcje – znane jako zamknięcia (*closures*) – są typowe dla stylu funkcyjnego i pozwalają w elegancki sposób tworzyć wyspecjalizowane wersje funkcji.