Jak myślisz, jakie są zalety programowania funkcjonalnego? A jak dziś odnoszą się do programistów?
Jakie są największe różnice między programowaniem funkcjonalnym a OOP?
functional-programming
Rayne
źródło
źródło
Odpowiedzi:
Styl programowania funkcjonalnego polega na opisaniu tego, czego chcesz, a nie na tym, jak to osiągnąć. tj .: zamiast tworzyć pętlę for ze zmienną iteratora i przechodzić przez tablicę, wykonując coś dla każdej komórki, można powiedzieć, że odpowiednik „ta etykieta odnosi się do wersji tej tablicy, w której ta funkcja została wykonana na wszystkich elementy."
Programowanie funkcjonalne przenosi do kompilatora więcej podstawowych pomysłów programistycznych, takich jak rozumienie list i buforowanie.
Największą zaletą programowania funkcjonalnego jest zwięzłość, ponieważ kod może być bardziej zwięzły. Program funkcjonalny nie tworzy zmiennej iteratora, która byłaby środkiem pętli, więc ten i inne rodzaje narzutu są eliminowane z kodu.
Inną ważną korzyścią jest współbieżność, która jest łatwiejsza do wykonania przy programowaniu funkcjonalnym, ponieważ kompilator zajmuje się większością operacji, które wymagały ręcznego ustawiania zmiennych stanu (jak iterator w pętli).
Pewne korzyści z wydajności można również dostrzec w kontekście pojedynczego procesora, w zależności od sposobu pisania programu, ponieważ większość języków funkcjonalnych i rozszerzeń obsługuje leniwą ocenę. W Haskell można powiedzieć „ta etykieta reprezentuje tablicę zawierającą wszystkie liczby parzyste”. Taka tablica jest nieskończenie duża, ale możesz poprosić o 100-tysięczny element tej tablicy w dowolnym momencie, bez konieczności wiedzieć - w czasie inicjalizacji tablicy - jakiej największej wartości będziesz potrzebować. Wartość zostanie obliczona tylko wtedy, gdy będzie to potrzebne i nie będzie dalej.
źródło
Największą korzyścią jest to, że nie jest to coś, do czego jesteś przyzwyczajony. Wybierz język taki jak Scheme i naucz się rozwiązywać z nim problemy, a staniesz się lepszym programistą w językach, które już znasz. To jak nauka drugiego ludzkiego języka. Zakładasz, że inni są w zasadzie odmianą samą w sobie, ponieważ nie masz z czym tego porównać. Kontaktowanie się z innymi, szczególnie tymi, które nie są związane z tym, co już wiesz, jest pouczające.
źródło
Dlaczego programowanie funkcjonalne ma znaczenie
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
źródło
Jeśli mówisz o obliczalności, nie ma oczywiście nic, co jest możliwe w programowaniu funkcjonalnym, ale nie imperatywnym (lub odwrotnie).
Celem różnych paradygmatów programowania nie jest umożliwienie rzeczy, które wcześniej nie były możliwe, ale ułatwienie rzeczy, które wcześniej były trudne.
Programowanie funkcjonalne ma na celu ułatwienie pisania programów, które są zwięzłe, wolne od błędów i równoległe.
źródło
Nie musi to być jedno lub drugie: używanie języka takiego jak C # 3.0 pozwala łączyć najlepsze elementy każdego z nich. OO może być stosowany do struktury na dużą skalę na poziomie klasy i powyżej, Styl funkcjonalny dla struktury o małej skali na poziomie metody.
Używanie stylu funkcjonalnego pozwala na pisanie kodu, który jasno deklaruje jego zamiar, bez pomieszania go z instrukcjami przepływu sterowania itp. Ze względu na zasady, takie jak programowanie wolne od efektów ubocznych, znacznie łatwiej jest wnioskować o kodzie i sprawdzić jego poprawność .
źródło
Myślę, że najbardziej praktycznym przykładem potrzeby programowania funkcjonalnego jest współbieżność - programy funkcjonalne są w naturalny sposób bezpieczne dla wątków, a biorąc pod uwagę rozwój wielordzeniowego sprzętu, ma to ogromne znaczenie.
Programowanie funkcjonalne zwiększa również modułowość - często można zobaczyć metody / funkcje w trybie imperatywnym, które są o wiele za długie - prawie nigdy nie zobaczysz funkcji dłuższej niż kilka linii. A ponieważ wszystko jest oddzielone - możliwość ponownego użycia jest znacznie lepsza, a testowanie jednostkowe jest bardzo łatwe.
źródło
Gdy program się rozrasta, liczba poleceń w naszym słowniku staje się zbyt duża, co bardzo utrudnia korzystanie z niego. To tutaj programowanie obiektowe ułatwia nam życie, ponieważ pozwala nam lepiej organizować nasze polecenia. Możemy powiązać wszystkie polecenia, które dotyczą klienta, z jakąś jednostką klienta (klasą), co czyni opis o wiele bardziej przejrzystym. Jednak program nadal jest sekwencją poleceń określających, jak ma postępować.
Programowanie funkcyjne zapewnia zupełnie inny sposób poszerzania słownictwa. Nie ogranicza się do dodawania nowych prymitywnych poleceń; możemy również dodać nowe struktury kontrolne - prymitywy, które określają, w jaki sposób możemy łączyć polecenia w celu utworzenia programu. W językach imperatywnych mogliśmy komponować polecenia w sekwencji lub używając ograniczonej liczby wbudowanych konstrukcji, takich jak pętle, ale jeśli spojrzysz na typowe programy, nadal zobaczysz wiele powtarzających się struktur; typowe sposoby łączenia poleceń
źródło
Nie myśl o programowaniu funkcyjnym w kategoriach „potrzeby”. Zamiast tego potraktuj to jako kolejną technikę programowania, która otworzy twój umysł, tak jak OOP, szablony, język asemblera itp. Mogły całkowicie zmienić twój sposób myślenia, kiedy (jeśli) się ich nauczyłeś. Ostatecznie nauka programowania funkcjonalnego uczyni cię lepszym programistą.
źródło
Jeśli nie znasz jeszcze programowania funkcjonalnego, nauka tego daje więcej sposobów rozwiązywania problemów.
FP to proste uogólnienie, które promuje funkcje do wartości pierwszej klasy, podczas gdy OOP służy do strukturyzowania kodu na dużą skalę. Istnieje jednak pewne nakładanie się, gdzie wzorce projektowe OOP mogą być reprezentowane bezpośrednio i znacznie bardziej zwięźle przy użyciu funkcji pierwszej klasy.
Wiele języków udostępnia zarówno FP, jak i OOP, w tym OCaml, C # 3.0 i F #.
Pozdrawiam, Jon Harrop.
źródło