.. _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.