Czy JavaScript jest językiem funkcjonalnym? Wiem, że ma obiekty i można z nim również korzystać z OOP, ale czy jest to również język funkcjonalny, czy można go używać w ten sposób?
Czasami ludzie powiedzą programowanie funkcjonalne, gdy mają na myśli programowanie imperatywne lub programowanie proceduralne . Ściśle mówiąc, programowanie funkcjonalne to:
W informatyce programowanie funkcjonalne jest paradygmatem programowania, który traktuje obliczenia jako ocenę funkcji matematycznych i unika stanu i zmiennych danych . Podkreśla zastosowanie funkcji, w przeciwieństwie do imperatywnego stylu programowania, który podkreśla zmiany stanu. Programowanie funkcjonalne ma swoje korzenie w rachunku lambda, formalnym systemie opracowanym w latach 30. XX wieku w celu zbadania definicji funkcji, zastosowania funkcji i rekurencji. Wiele funkcjonalnych języków programowania można traktować jako rozwinięcia rachunku lambda.
Chociaż Javascript nie jest powszechnie znany ani używany jako język funkcjonalny, zawiera on pewne elementy funkcjonalne :
JavaScript ma wiele wspólnego ze Scheme. To jest dynamiczny język. Ma elastyczny typ danych (tablice), który może łatwo symulować wyrażenia s. A co najważniejsze, funkcjami są lambdas.
Schemat jest dialektem Lispa i prawdopodobnie jednym z języków, o których myśli większość programistów, omawiając programowanie funkcjonalne. Jeśli chodzi o orientację obiektową , JavaScript jest językiem zorientowanym obiektowo. Ale jego orientacja obiektowa opiera się na prototypach :
Programowanie prototypowe to styl programowania obiektowego, w którym klasy nie są obecne, a ponowne użycie zachowania (znane jako dziedziczenie w językach opartych na klasach) odbywa się poprzez proces klonowania istniejących obiektów, które służą jako prototypy. Ten model może być również znany jako programowanie bezklasowe, prototypowe lub oparte na instancjach. Delegowanie to funkcja języka obsługująca programowanie prototypowe.
Więc chociaż JavaScript jest zorientowany obiektowo, nie jest zgodny z bardziej powszechnym modelem opartym na klasach , podobnie jak języki takie jak C ++, C #, Java i PHP (i kilka innych). I oczywiście jest to także język imperatywny, co prowadzi do pomylenia z funkcjonalnym programowaniem, które opisałem powyżej.
Wiesz, jak OOP stał się / wydaje się następną ewolucją w programowaniu, czy to oznacza, że „Funkcjonalne programowanie” to kolejna ewolucja
Orientacja obiektowa i programowanie funkcjonalne to tylko dwa z wielu różnych paradygmatów programowania , są to różne style programowania z różnymi koncepcjami i abstrakcjami. Kluczowym słowem jest „inny”. Nie ma jednego paradygmatu, który byłby lepszy od innych lub bardziej rozwinięty niż inne, każdy z nich pasuje do niektórych scenariuszy lepiej niż inne. Niektóre mogą być nieco starsze niż inne, ale pod względem ewolucyjnym czyni je lepszymi, ponieważ przetrwały dłużej. Ale to nie jest zbyt mądry sposób patrzenia na to.
JavaScript, jak opisałem powyżej i jako kilka innych języków, jest wieloparadygmatyczny. Umożliwia pisanie kodu w imperatywnym, obiektowym i funkcjonalnym stylu opartym na prototypach. Od Ciebie zależy, który najlepiej pasuje do tego, co budujesz. Istnieje również kilka pojedynczych języków paradygmatu, kanonicznym przykładem jest Java, która pozwala tylko na programowanie obiektowe zorientowane klasowo 1 .
Naprawdę powinieneś oprzeć się wszelkiej potrzebie traktowania języków i paradygmatów jako oświadczeń o modzie. Jest tam mnóstwo bzdur, napisanych głównie przez fanów / fanów lub marketingowców, z niewielką (jeśli w ogóle) wiedzą i zrozumieniem programowania. Terminy takie jak „lepszy”, „bardziej rozwinięty” itp. Po prostu nie mają zastosowania.
Uczę się najlepiej na przykładach, może ktoś może pokazać wykonywanie tego samego zadania w sposób OOP, a następnie w sposób programowania funkcjonalnego, aby zrozumieć i porównać działanie programowania funkcjonalnego.
To byłby okropny sposób na naukę. Orientacja funkcjonalna i obiektowa to całkiem różne style, a żaden inny przykład, niż strasznie prosty, nie pasowałby do jednego lub drugiego stylu.
1 Ale ostatnio próbuje rozszerzyć swój zakres na programowanie ogólne, zobaczmy, jak to pójdzie.
Podsumowując:
- Skoncentruj się na nauce Javascript, to piękny i niezwykle użyteczny język. Naucz się języka, a nie szumu.
- Całkiem kilka różnych paradygmatów, wszystkie równie przydatne. Od Ciebie zależy, który wybierzesz, a który najlepiej pasuje do tego, co budujesz.
- Jeśli chcesz nauczyć się programowania funkcjonalnego, wybierz bardziej odpowiedni język, na przykład Scheme lub Clojure . Ale najpierw musisz zrozumieć związane z nimi pojęcia matematyczne.
- Przeprowadź badania, zanim zapytasz. Odpowiedzi na większość pytań znajdują się w odpowiednich artykułach w Wikipedii. Umiejętność prowadzenia badań i zadawania pytań jest niezwykle ważną umiejętnością dla każdego programisty.