Javascript è un linguaggio funzionale? So che ha oggetti e puoi anche fare OOP con esso, ma è anche un linguaggio funzionale, può essere usato in quel modo?
A volte, le persone diranno programmazione funzionale, quando ciò che intendono è programmazione imperativa o programmazione procedurale . A rigor di termini, la programmazione funzionale è:
Nell'informatica, la programmazione funzionale è un paradigma di programmazione che considera il calcolo come la valutazione di funzioni matematiche ed evita dati di stato e mutabili . Sottolinea l'applicazione di funzioni, in contrasto con lo stile di programmazione imperativo, che enfatizza i cambiamenti di stato. La programmazione funzionale ha le sue radici nel calcolo lambda, un sistema formale sviluppato negli anni '30 per studiare la definizione della funzione, l'applicazione della funzione e la ricorsione. Molti linguaggi di programmazione funzionale possono essere visti come elaborazioni sul calcolo lambda.
Sebbene Javascript non sia ampiamente conosciuto o utilizzato come linguaggio funzionale, presenta alcuni elementi funzionali :
JavaScript ha molto in comune con Scheme. È un linguaggio dinamico. Ha un tipo di dati flessibile (array) che può facilmente simulare espressioni-s. E, soprattutto, le funzioni sono lambda.
Scheme è un dialetto di Lisp e probabilmente uno dei linguaggi a cui la maggior parte dei programmatori pensa quando discute della programmazione funzionale. Per quanto riguarda l' orientamento agli oggetti , Javascript è un linguaggio orientato agli oggetti. Ma il suo orientamento agli oggetti è basato sul prototipo :
La programmazione basata su prototipi è uno stile di programmazione orientata agli oggetti in cui le classi non sono presenti e il riutilizzo del comportamento (noto come eredità nei linguaggi basati su classi) viene eseguito tramite un processo di clonazione di oggetti esistenti che fungono da prototipi. Questo modello può anche essere noto come programmazione senza classi, orientata ai prototipi o basata su istanze. La delega è la funzione del linguaggio che supporta la programmazione basata su prototipi.
Quindi, sebbene Javascript sia orientato agli oggetti, non segue il modello basato sulla classe più comune , così come i linguaggi come C ++, C #, Java e PHP (e molti altri). E ovviamente è anche un linguaggio imperativo, che porta alla confusione con la programmazione funzionale che ho descritto sopra.
Sai come OOP è diventato / sembra la prossima evoluzione della programmazione, significa che la "Programmazione funzionale" è la prossima evoluzione
L'orientamento agli oggetti e la programmazione funzionale sono solo due dei molti paradigmi di programmazione diversi , sono stili di programmazione diversi con concetti e astrazioni differenti. La parola chiave è "diversa". Non esiste un unico paradigma migliore di altri o più evoluto di altri, ognuno si adatta ad alcuni scenari meglio degli altri. Alcuni possono avere origini molto più antiche di altri, ma in termini evolutivi ciò li rende migliori, poiché sono sopravvissuti più a lungo. Ma non è un modo molto intelligente di vederlo.
Javascript, come ho descritto sopra e alcune altre lingue, è multi-paradigma. Ti permette di scrivere codice in stile imperativo, orientato ai prototipi e orientato agli oggetti. Sta a te scegliere quale si adatta meglio a ciò che stai costruendo. Esistono anche diversi linguaggi a paradigma singolo, l'esempio canonico è Java, che consente solo la programmazione orientata agli oggetti basata su classi 1 .
Dovresti davvero resistere a qualsiasi bisogno di trattare linguaggi e paradigmi come dichiarazioni di moda. C'è un'abbondanza di cazzate là fuori, per lo più scritte da fan / fangirl o persone di marketing, con poca (se presente) conoscenza e comprensione della programmazione. Termini come "migliore", "più evoluto" ecc. Semplicemente non si applicano.
Imparo meglio attraverso esempi, forse qualcuno potrebbe mostrare di svolgere lo stesso compito in modo OOP e quindi in modo Programmazione funzionale per me stesso per capire e confrontare ciò che la programmazione funzionale fa / è.
Sarebbe un modo terribile per imparare. L'orientamento funzionale e dell'oggetto sono stili abbastanza diversi e qualsiasi esempio diverso da quelli terribilmente semplici non si adatterebbe all'uno o all'altro stile.
1 Ma ultimamente tenta di estendere il suo campo di applicazione alla programmazione generica, vediamo come va.
In conclusione:
- Concentrati sull'apprendimento di Javascript, è un linguaggio bellissimo ed estremamente utile. Impara la lingua, non l'hype.
- Parecchi paradigmi diversi, tutti ugualmente utili. Spetta a te scegliere quale preferisci e quale si adatta meglio a qualsiasi cosa tu stia costruendo.
- Se vuoi imparare la programmazione funzionale, scegli un linguaggio più adatto, come Scheme o Clojure . Ma prima devi capire i concetti matematici coinvolti.
- Fai qualche ricerca prima di chiedere. Alla maggior parte delle tue domande trovano risposta gli articoli pertinenti di Wikipedia. Saper ricercare e chiedere è un'abilità estremamente importante per qualsiasi programmatore.