Ostatnio uczyłem się F # dla zabawy (jestem deweloperem VB.NET/C#) i bardzo podoba mi się to, co ma do zaoferowania. Teoretycznie tak jest. Ale mam problem z wymyśleniem scenariuszy, w których wolałbym kodować w F # niż w C #. Jakieś pomysły?
Ostatnio uczyłem się F # dla zabawy (jestem deweloperem VB.NET/C#) i bardzo podoba mi się to, co ma do zaoferowania. Teoretycznie tak jest. Ale mam problem z wymyśleniem scenariuszy, w których wolałbym kodować w F # niż w C #. Jakieś pomysły?
Odpowiedzi:
Kilka argumentów za czysto funkcjonalnym programowaniem:
Aby uzyskać pełne leczenie, zobacz Dlaczego programowanie funkcjonalne ma znaczenie i Dlaczego programowanie funkcjonalne ma znaczenie .
Mam problem z wymyśleniem scenariuszy, w których wolałbym kodować w języku F # niż w języku C #. Jakieś pomysły?
Od tutaj :
Serwery asynchroniczne
Metaprogramowanie (np. Parsowanie)
Informatyka techniczna
Aplikacje GUI
Programowanie logiki
Testowanie
Wydajność
inline
dla bezpłatnej abstrakcji wyższego rzędu.Oto, do czego służy programowanie w stylu funkcjonalnym - mniej więcej codziennie.
Robimy wiele rzeczy statystycznych i aktuarialnych z dość dużymi zbiorami danych. Dane pobierane z bazy danych to - w zasadzie statyczne, niezmienne obiekty. Nie ma powodu, aby tworzyć klasę za pomocą metod.
Każdy etap obliczeń dodaje kilka dodatkowych szczegółów, ale zasadniczo nie powoduje mutacji obiektu. Na „końcu” rurociągu naprawdę robimy fantazyjne redukcje, aby obliczyć sumy, liczby i inne rzeczy.
Wyobraź to sobie.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
Każda „faza” obliczeń jest funkcjonalną pętlą programowania, która wykonuje proste odczyt-obliczanie-wydajność i tworzy złożony obiekt z innymi rzeczami i wynikami.
(Używamy Pythona, stąd programowanie funkcjonalne przy użyciu funkcji generatora).
Łatwiej jest używać bezstanowych, niezmiennych obiektów.
criteria() |> some_query |> calculate |> enrich |> summarize
Uważam, że operator rury przesyłającej dalej może prowadzić do wyraźniejszego kodu, ale dygresuję.
map
aby uzyskać ten sam efekt.
Technicznie nie jest to unikalna właściwość programowania funkcjonalnego, a F # nie jest czystym językiem funkcjonalnym. F #, jako jeden z potomków ML, zapewnia doskonałe dopasowanie wzorca i algebraiczne typy danych. Tak więc dla każdego zadania, które wymaga skomplikowanych struktur danych, F # jest o wiele bardziej wyrazisty i łatwy w użyciu niż C #.
Wyobraź sobie implementację kompilatora w C # i F # - reprezentowanie abstrakcyjnego drzewa składni i przekształcanie się nad nim jest o wiele prostsze, jeśli Twój język zapewnia ADT i dopasowanie wzorca.
Jeśli chcesz w pełni funkcjonalny wypróbować Haskell, Erlang ma również kilka fajnych rzeczy na ten temat.
Simon Payton-Jones powiedział o Haskellu, że chce mieć program, który oczywiście nie ma żadnych błędów, niż nie ma oczywistych błędów.
(Prawdopodobnie wyceniłem trochę cytat, ale masz pomysł)
Ograniczając skutki uboczne, znacznie ułatwiasz sprawdzenie, czy kod jest poprawny.
Niewątpliwą zaletą jest to, że można go znacznie łatwiej sparaliżować.
F#
nie jest w pełni reprezentatywny dla programowania funkcjonalnego. SpróbujClojure
zamiast tego.