Tylko dlatego, że funkcje są obiektami pierwszej klasy, istnieją domknięcia i funkcje wyższego rzędu, czy Javascript zasługuje na miano języka programowania funkcjonalnego? Główną rzeczą, której moim zdaniem brakuje, są Pure Functions i nie `` czuje się '' jak inne języki funkcjonalne, takie jak seplenienie (chociaż to nie jest wystarczający powód, aby nie być funkcjonalnym językiem ...)
javascript
functional-programming
terminology
hvgotcodes
źródło
źródło
Odpowiedzi:
Powtarzając własną odpowiedź na podobne pytanie,
źródło
Powiedziałbym, że jest to język wieloparadygmatyczny.
EDYCJA: To wieloparadygmat i zawiera konstrukcje funkcjonalne.
źródło
jeśli rozciągniesz i przekręcisz termin „programowanie funkcjonalne” do poziomu dyskusji filozoficznych, to pytanie może być ponownie otwarte. Jednak kończy się to na poziomie przydatnych pytań, takich jak „Czy C ++ jest naprawdę językiem programowania”?
Odpowiedź na twoje pytanie na bardziej codziennym poziomie brzmi „nie” .
Programowanie funkcjonalne oznacza, że program jest konceptualizowany jako ocena funkcji, a nie przepływ sterowania. Kod jest opisem funkcji i nie ma nieodłącznej koncepcji przepływu sterowania.
JavaScript ma przepływ kontroli i jest konceptualizowany jako język imperatywny. Z punktu widzenia projektu nie jest to język funkcjonalny.
źródło
Termin „język programowania funkcjonalnego” jest obecnie tak przeciążony, że jest prawie bezużyteczny. Istnieją dwa dominujące znaczenia:
Wybierz swoje znaczenie, a na pytanie odpowiesz.
źródło
Nie sądzę, aby istniała konkretna definicja programowania funkcjonalnego, jednak wiele rzeczy, które ludzie uważają za „programowanie funkcjonalne”, można zrobić za pomocą javascript. Oto dobry krótki przykład w tym artykule.
źródło
Dla mnie Javascript jest zarówno językiem imperatywnym, jak i funkcjonalnym, i możesz go używać w dowolny sposób, a nawet ( egad ) w obie strony. Lub możesz wybrać jeden paradygmat i nigdy nie dotykać drugiego. To zależy od Ciebie. Podobnie jak Ty, uważam, że Javascript nie należy nazywać językiem funkcjonalnym, ponieważ pozwala on wchodzić i wychodzić z paradygmatu programowania funkcjonalnego. Być może gdyby miał jakąś pragmę, by ograniczyć cię do używania tylko paradygmatów programowania funkcjonalnego, to byłoby to przydatne, jak sądzę. Ale podsumowując, mówię, że jest to bardziej imperatywny / proceduralny język z dorzuconymi niektórymi funkcjami programowania.
źródło
Zwykle nie myślę o językach programowania jako o jednym konkretnym paradygmacie, ale że nadają się one do pewnych paradygmatów. Jednak tylko dlatego, że nadają się do określonego paradygmatu, nie oznacza, że musisz używać tego paradygmatu. Całkiem możliwe jest pisanie programów obiektowych w C i imperatywnych w ML. Nie używanie określonego paradygmatu do rozwiązania problemu, ponieważ język nie jest do tego przeznaczony, jest po prostu sztucznym ograniczaniem siebie (oczywiście nadal należy brać pod uwagę ograniczenia języka przy podejmowaniu decyzji, czy dane rozwiązanie będzie dobre).
źródło
Cóż, nie powiedziałbym, że to programowanie funkcjonalne, ale tak bym powiedzieć, że jest obiektowym i właśnie dzisiaj przyjaciel powiedział, że nie umieścić go na tej półce albo.
Tak więc, chociaż nie powiedziałbym, że tak jest, myślę, że jest miejsce na opinię. Ma klasyczne cechy programowania funkcjonalnego, ale nie ma innych.
źródło
Javascript jest do rzeczy. To naprawdę zależy od tego, jak go zaprogramujesz. Jeśli koduję w sposób OO, czy nie byłoby to OO? Więc jeśli po prostu kodujesz rzeczy w sposób „funkcjonalny”, będzie to funkcjonalne. Wydaje mi się, że jest to język wieloparadygmatyczny, więc nazwanie go tylko jedną rzeczą nie jest do końca trafne.
źródło
@petraszd Przepiszę trochę Twój kod, aby uzyskać „nowy” dla operatora:
Ale wiem, że ten sposób ma wady dla dużych pętli ...
Powiązane pytanie o optymalizację rekurencji ogona w JS
PS Zamieszczone tutaj, bo mam problem z formatowaniem kodu podczas wysyłania jako komentarz
źródło
W Javascript możesz zrobić coś takiego !!
Stworzyłem stronę github w celu demonstracji tej koncepcji i możesz sklonować / wyświetlić moją implementację
źródło
Jak wiemy, funkcjonalny język programowania nie pozwala na zmianę lub mutację elementów (stanu) funkcji, ale w javascript jest to dozwolone w tym sensie, że nie jest funkcjonalnym językiem programowania, chociaż traktuje funkcję jako obywatela pierwszej klasy.
źródło
To, czego naprawdę nienawidzę w javascript (jeśli spróbujesz spojrzeć na to jako język FP), to:
Musisz zrozumieć środowisko stosu JS (ja nie, jeśli to właściwe określenie), aby zrozumieć takie zachowanie.
Na przykład w schemacie nie możesz czegoś takiego stworzyć (ok, ok - z pomocą odnośników do języków bazowych możesz to zrobić):
źródło