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

wprowadzenie

Оглавление

Dzisiaj programowanie funkcyjne (functional programming, FP) nie jest już jedynie przedmiotem analizy na wydziałach badawczych uniwersytetów. Stało się ważną i ekscytującą częścią głównego nurtu programowania. Większość języków i platform powstałych w ostatniej dekadzie jest funkcyjna, więc można przewidywać, że przyszłość należy do programowania funkcyjnego. W tym samym czasie w nowych wersjach języków obiektowych, takich jak C# i Java, obserwujemy wprowadzanie cech funkcyjnych, co umożliwia stosowanie stylu programowania obejmującego wiele paradygmatów.

Mimo to przyjmowanie tych zasad w społeczności C# jest powolne. Dlaczego tak się dzieje? Jednym z powodów jest, moim zdaniem, brak dobrej literatury.

■ Większość literatury dotyczącej FP jest napisana w językach funkcyjnych i na ich potrzeby, zwłaszcza dotyczy to Haskella. Dla deweloperów z doświadczeniem w programowaniu obiektowym stanowi to barierę językową przy poznawaniu nowych pojęć. Choć wiele pojęć ma także zastosowanie w językach o wielu paradygmatach, takich jak C#, nauka nowego paradygmatu i nowego języka naraz to duże wyzwanie.

■ Co ważniejsze, większość książek ma tendencję do ilustrowania technik i pojęć funkcyjnych za pomocą przykładów z dziedziny matematyki lub informatyki. Dla większości programistów, którzy pracują na co dzień przy aplikacjach biznesowych (LOB), tworzy to lukę między dziedzinami i powoduje, że zastanawiają się, na ile te techniki pasują do rzeczywistych aplikacji.

Te braki stanowiły podstawowe przeszkody na mojej drodze poznawania FP. Po odłożeniu na bok kolejnej książki, która tłumaczyła pojęcie rozwijania funkcji, znane jako currying, pokazując, jak można rozwinąć funkcję add z użyciem liczby 3, tworząc funkcję, która może dodać 3 do dowolnej liczby (czy potraficie wyobrazić sobie aplikację, w której byłoby to choć trochę przydatne?), zdecydowałem podążyć własną ścieżką badawczą. Obejmowało to naukę z pół tuzina języków funkcyjnych (jednych lepszych od innych) i zorientowanie się, które pojęcia FP mogą być skutecznie zastosowane w C# – w aplikacjach, za które większość deweloperów bierze pieniądze. Skończyło się to napisaniem tej książki.

Publikacja ta wypełnia lukę w stosowaniu języka C#, pokazując deweloperom, jak można w tym języku wykorzystać techniki funkcyjne. Stanowi też łącznik między domenami, prezentując sposoby zastosowania tych technik w typowych scenariuszach biznesowych. W książce tej przyjmuję podejście pragmatyczne i opisuję techniki funkcyjne w takim zakresie, w jakim są one użyteczne w typowych aplikacjach scenariusza LOB, pomijając większość podstawowej teorii FP.

Programowaniem funkcyjnym warto się zainteresować, gdyż daje ono nam następujące korzyści:

Możliwości – Oznacza to po prostu, że możemy zrobić więcej, używając mniejszej ilości kodu. FP podnosi poziom abstrakcji, pozwalając nam na pisanie kodu wysokiego poziomu, uwalniając się od technik niskiego poziomu, które dodają złożoność, lecz nie wartości.

Bezpieczeństwo – Jest to prawda, szczególnie gdy mamy do czynienia ze współbieżnością. Program napisany w stylu imperatywnym może dobrze działać w implementacji na jednym wątku, ale powodować różnego rodzaju błędy w przypadku uruchomienia wielowątkowego. Kod funkcyjny oferuje znacznie większe gwarancje w scenariuszach współbieżnych, więc w erze procesorów wielordzeniowych naturalny jest wzrost zainteresowania FP.

Przejrzystość – Spędzamy więcej czasu, utrzymując i wykorzystując istniejący kod, niż go pisząc, zatem ważne jest, aby kod był zrozumiały i wyraźnie pokazywał intencje. Gdy zaczniecie myśleć funkcyjnie, uzyskanie tej klarowności stanie się bardziej naturalne.

Każdy, kto przez jakiś czas programował obiektowo, będzie musiał włożyć trochę wysiłku i wykazać chęć do eksperymentowania, zanim pojęcia pokazane w tej książce dadzą rezultaty. Mam dwie rady:

Bądźcie cierpliwi – Może się okazać, że niektóre części będziecie musieli przeczytać więcej niż raz. Może odłożycie tę książkę na kilka tygodni i okaże się, że przy ponownym podejściu coś, co wydawało się niezrozumiałe, nagle zacznie mieć sens.

Eksperymentujcie z kodem – Niczego się nie nauczymy, jeśli nie pobrudzimy rąk. Książka podaje wiele przykładów i ćwiczeń, a wiele z fragmentów kodu można przetestować samodzielnie w REPL.

Współpracownicy mogą być mniej chętni do eksperymentów. Można się spodziewać, że będą protestować przeciwko przyjmowaniu nowego stylu i ze zdumieniem patrzeć na nasz kod, mówiąc coś w rodzaju „A dlaczego nie zrobić x?” (gdzie x jest zwykle nudne, przestarzałe i zazwyczaj szkodliwe). Nie dyskutujcie. Po prostu usiądźcie i popatrzcie, jak w końcu zaczynają zmieniać zdanie i stosować wasze techniki, aby rozwiązać wciąż powtarzające się problemy.

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

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