Nur weil Funktionen erstklassige Objekte sind, es Verschlüsse und Funktionen höherer Ordnung gibt, verdient Javascript es, als funktionale Programmiersprache bezeichnet zu werden? Die Hauptsache, von der ich denke, dass sie fehlt, sind reine Funktionen, und sie fühlen sich nicht wie andere funktionale Sprachen wie Lisp an (obwohl dies kein guter Grund dafür ist, keine funktionale Sprache zu sein ...)
javascript
functional-programming
terminology
hvgotcodes
quelle
quelle
Antworten:
Ich wiederhole meine eigene Antwort auf eine ähnliche Frage.
quelle
Ich würde sagen, dass es eine Multi-Paradigmen-Sprache ist.
EDIT: Es ist Multi-Paradigma und enthält funktionale Konstrukte.
quelle
Wenn Sie den Begriff "funktionale Programmierung" bis zu philosophischen Diskussionen strecken und verdrehen, ist diese Frage möglicherweise wieder offen. Dann landen Sie jedoch auf der Ebene nützlicher Fragen wie "Ist C ++ wirklich eine Programmiersprache"?
Die Antwort auf Ihre Frage auf mehr täglicher Ebene lautet "Nein" .
Funktionale Programmierung bedeutet, dass das Programm eher als Bewertung einer Funktion als als Kontrollfluss konzipiert ist. Der Code ist eine Beschreibung von Funktionen und hat kein inhärentes Konzept eines Kontrollflusses.
JavaScript hat einen Kontrollfluss und ist als zwingende Sprache konzipiert. Von seinem Entwurfsziel her ist es eindeutig keine funktionale Sprache.
quelle
Der Begriff "funktionale Programmiersprache" ist heutzutage so überladen, dass er fast unbrauchbar ist. Es gibt zwei dominante Bedeutungen:
Wählen Sie Ihre Bedeutung und dann ist die Frage beantwortbar.
quelle
Ich glaube nicht, dass es eine konkrete Definition der funktionalen Programmierung gibt, aber viele Dinge, die Leute als "funktionale Programmierung" betrachten, können mit Javascript durchgeführt werden. Hier ist ein gutes kurzes Beispiel in diesem Artikel.
quelle
Für mich ist Javascript sowohl eine zwingende als auch eine funktionale Sprache, und Sie können wählen, ob Sie es in beide Richtungen und sogar ( egad ) in beide Richtungen verwenden möchten . Oder Sie können ein Paradigma verwenden und niemals das andere berühren. Es liegt an dir. Ich denke nicht, dass Javascript wie Sie als funktionale Sprache bezeichnet werden sollte, da es Ihnen ermöglicht, in das Paradigma der funktionalen Programmierung hinein- und herauszuwandern. Wenn es ein Pragma hätte, Sie nur mit funktionalen Programmierparadigmen einzuschränken, wäre das vielleicht nützlich, denke ich. Zusammenfassend sage ich jedoch, dass es sich eher um eine imperative / prozedurale Sprache handelt, in die einige funktionale Programmierfunktionen integriert sind.
quelle
Ich neige dazu, Programmiersprachen nicht als ein bestimmtes Paradigma zu betrachten, sondern als geeignet für bestimmte Paradigmen. Nur weil sie sich für ein bestimmtes Paradigma eignen, heißt das nicht, dass Sie dieses Paradigma verwenden müssen. Es ist durchaus möglich, objektorientierte Programme in C und imperative Programme in ML zu schreiben. Wenn Sie ein bestimmtes Paradigma nicht verwenden, um ein Problem zu lösen, weil die Sprache nicht dafür ausgelegt ist, beschränken Sie sich nur künstlich (natürlich sollten Sie die Einschränkungen einer Sprache immer noch berücksichtigen, wenn Sie entscheiden, ob eine bestimmte Lösung eine gute Lösung ist).
quelle
Nun, ich würde nicht sagen, dass es funktionale Programmierung ist, aber dann würde ich sagen, dass es objektorientiert ist und erst heute sagte ein Freund, er würde es auch nicht in dieses Regal stellen.
Also, obwohl ich es nicht sagen würde, gibt es wohl Raum für Meinungen. Es hat klassische Merkmale der funktionalen Programmierung, es hat keine anderen.
quelle
Javascript ist bis zu einem gewissen Punkt. Es hängt wirklich davon ab, wie Sie es programmieren. Wenn ich auf OO-Weise codiere, wäre es nicht OO? Wenn Sie also Dinge nur auf "funktionale" Weise codieren, wäre dies funktional. Ich denke, es ist eine Multi-Paradigmen-Sprache, also ist es nicht ganz richtig, sie nur eines zu nennen.
quelle
@petraszd Ich schreibe Ihren Code ein wenig um, um ein "neues" für den Operator zu erhalten:
Aber ich weiß, dass dieser Weg Nachteile für große Schleifen hat ...
Verwandte Frage zur Optimierung der Schwanzrekurtion in JS
PS Hier gepostet, weil es Probleme mit der Code-Formatierung beim Posten als Kommentar gibt
quelle
In Javascript können Sie so etwas tun !!
Ich habe eine Github-Seite erstellt, um dieses Konzept zu demonstrieren, und Sie können meine Implementierung klonen / anzeigen
quelle
Wie wir wissen, erlaubt die funktionale Programmiersprache nicht, die Elemente (den Zustand) von Funktionen zu ändern oder zu mutieren, aber in Javascript ist es in diesem Sinne erlaubt, dass es keine funktionale Programmiersprache ist, obwohl sie die Funktion als Bürger erster Klasse behandelt.
quelle
Was ich in Javascript wirklich hasse (wenn Sie versuchen, es als FP-Sprache zu betrachten), ist Folgendes:
Sie müssen die JS-Stack-Umgebung verstehen (ich weiß nicht, ob es der richtige Begriff ist), um ein solches Verhalten zu verstehen.
Im Schema zum Beispiel können Sie so etwas einfach nicht produzieren (Ok, ok - mit Hilfe der Referenzen der zugrunde liegenden Sprachen können Sie es machen):
quelle