Dwa lata temu spotkałem go poraz pierwszy. Cechowały go dziwna składnia, nienaturalny przepływ sterowania i komplikowanie najprostszych operacji do rocket science na linked listach i rekurencji. Pomyślałem wtedy - jak można pisać w czymś takim?! Byłem w błędzie.

/ wow, temat wpisu w ogóle nie sugerował takiego plot twistu /

Programowanie funkcyjne

Być może potknąłeś się o programowanie funkcyjne. Mógł to być wielki kamień stojący 20 metrów od Twojej ścieżki kariery. Tak, ten z wysprayowanym napisem “NIE DOTYKAĆ”. Jeżeli to Twój pierwszy kontakt z programowaniem funkcyjnym, to musisz wiedzieć, że programowanie funkcyjne nie jest nowym tworem. Podstawy teoretyczne istnieją już od lat 30 ubiegłego wieku, a pierwsze języki funkcyjne powstały w tych samych czasach, co pierwsze języki imperatywne.

Czym jest programowanie funkcyjne? Jest to po prostu podejście do pisania programów, w którym wszystkie rozwiązania problemów sprowadza się do zbudowania funkcji. Jeżeli Twoją pierwszą myślą jest “przecież teraz też implementuję funkcje”, to masz rację. Różnica polega na tym, że:

  • przypisujesz wartości do zmiennych,
  • implementujesz procedury (takie funkcje, tylko nie zwracające wartości),
  • sterujesz wykonaniem programu instrukcja po instrukcji.

W podejściu funkcyjnym wszystko co robisz jest ubrane w funkcję. Wynik jednej funkcji musi być przekazany bezpośrednio do drugiej funkcji. Funkcja musi zwracać wartość.

F# nie jest językiem funkcyjnym.

/ Kurtyna /

F#

F# jest hybrydą. Większość języka jest skonstruowana pod paradygmat funcyjny. Mamy jednak wszystkie konstrukcje, potrzebne do stworzenia obiektowego kodu.

Kilka cech F# sprawia, że jest on doskonałym narzędziem do bezpiecznego programowania:

  • statyczne typowanie z silną inferencją,
  • używa wyrażeń zamiast twierdzeń - funkcja zawsze zwraca wartość,
  • domyślnie operuje na wartościach niezmiennych (ang. immutable),
  • używa typów opcjonalnych zamiast null,
  • pozwala na łatwe zwracanie niepoprawnego stanu zamiast operowania na wyjątkach.

Istotną cechą F# jest możliwość wykorzystania kodu napisanego w tym języku w dowolnych aplikacjach .NET. Interoperacyjność pozwala na wykorzystanie właścowości F# w tych miejscach, w których mają zdecydowaną przewagę nad kodem C#. Przykładami takich zastosowań jest implementacja skomplikowanych algorytmów oraz tworzenie wielowątkowego kodu.

W kolejnych wpisach będę przybliżał poszczególne cechy F# i porównywał je z możliwościami języka C#.