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?
programming-languages
functional-programming
f#
System wyłączony
źródło
źródło
F#
nie jest w pełni reprezentatywny dla programowania funkcjonalnego. SpróbujClojure
zamiast tego.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 .
źródło
Od tutaj :
Serwery asynchroniczne
Metaprogramowanie (np. Parsowanie)
Informatyka techniczna
Aplikacje GUI
Programowanie logiki
Testowanie
Wydajność
inline
dla bezpłatnej abstrakcji wyższego rzędu.źródło
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.
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.
źródło
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.
źródło
Idealny do ograniczania mapy masywnego wielosystemowego i masywnego równoległości wielordzeniowej. Całkiem fajne, biorąc pod uwagę, że obecnie serwery podstawowe mają 48 rdzeni (96 zliczających HT).
źródło
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.
źródło
Niewątpliwą zaletą jest to, że można go znacznie łatwiej sparaliżować.
źródło