Domanda

Quali lingue sono disponibili per promuovere la programmazione orientata agli oggetti e funzionale? So che qualsiasi linguaggio che supporta le funzioni di prima classe può essere considerato funzionale, ma sto cercando una sintassi che sia specificamente mirata per entrambi gli stili di codifica.

Usando un linguaggio del genere, sto immaginando di isolare tutte le modifiche di stato in una singola porzione di codice e di avere il resto del programma puramente funzionale. Solo a pensarci mi fa sbavare (debugging cielo!).

Finora ho scoperto Scala sebbene ne abbia appena sentito parlare (e sembra fantastico). Ci sono grandi contendenti in questo "stile misto" paradigma?

È stato utile?

Soluzione

I più noti sono OCaml e F # (che può essere vagamente descritto come OCaml per .NET).

Esistono molte altre lingue multi-paradigma, come Oz , ma hanno valore prevalentemente pedagogico. Al contrario, OCaml è molto pratico. È quasi veloce come C e quasi bello come Haskell :)

I popolari linguaggi di scripting come Python e Ruby ti consentono di programmare anche in stile funzionale. Tuttavia, non forniscono una delle strutture più potenti che "classica". i linguaggi funzionali (così come OCaml) hanno: pattern matching (non confonderlo con regexp) .

Altri suggerimenti

Javascript: OO e funzionale .

Inoltre, molti linguaggi di scripting come Python, Ruby, Lua, ecc. hanno questa capacità, ma mancano di molte delle belle caratteristiche dei linguaggi funzionali come i tipi di dati algebrici e la corrispondenza dei pattern.

OCaml e F # sono le lingue più popolari che mescolano OOP e FP, per quanto ne so.

La maggior parte delle lingue, come Ruby, mescola la programmazione funzionale, ma molte persone non se ne rendono nemmeno conto. Trovo che linguaggi del genere lasciano molto a desiderare sul fronte della sintassi e simili.

Haskell : puro funzionamento, praticamente niente OO, ma vai avanti, immergiti. : D

Scala : un meraviglioso mix di OO e FP, potrebbe eventualmente superare Java come linguaggio principale sulla JVM in un decennio o 2. Mi piace perché porta la programmazione funzionale sulla piattaforma Java, qualcosa che è ho davvero bisogno di IMHO.

C # : fantastico supporto per OO, oltre a diventare più funzionale (già funzioni di prima classe, vedremo quali miglioramenti porta .net 4)

F # : linguaggio .net Costruito per funzionare in modo specifico, al contrario di C #, che originariamente era concepito per roba OO.

Python : ottimo per OO, ma non adatto a FP

Javascript : supporta funzioni di prima classe, ma non specificamente progettate per FP come Scala e F #. Ancora leggermente migliore di Python IMHO.

Perché vuoi mescolare OO e FP? Come trampolino di lancio?

C #. È indispensabile, che può essere utile, ma ha anche molte caratteristiche funzionali. Lambdas, iteratori e LINQ sono tutti funzionali.

Probabilmente non piacerà molto ai puristi, ma funziona per me.

JavaScript, Python e Ruby potrebbero essere usati in questo modo, ma Scala salta di livello digitando la funzione staticamente e lavorando sotto JVM.

Stai davvero facendo la domanda sbagliata. La tua domanda si basa sulla distinzione tra "OO". e "funzionale" programmazione. Questa distinzione non è interessante o pertinente. Infatti, secondo "supporta la funzione di prima classe" criteri, anche Java è funzionale .

Ma hai colpito l'unghia sulla testa con "puramente funzionale". Questo è il pezzo interessante. Quali lingue ti offrono trasparenza e purezza di riferimento del genere? Bene, la maggior parte di loro, se stai molto attenta. Ma non molti di loro in realtà garantiscono che le tue funzioni siano pure. Posso solo pensare a un paio di lingue che ti offrono questo.

Uno di questi è Haskell . In Haskell, scrivi programmi che sono puramente funzionali dall'inizio alla fine. Gli effetti collaterali sono delegati a una struttura di dati chiamata IO, e lo stato viene gestito facendolo passare attraverso funzioni pure o incapsulandolo in monadi. Quindi hai il tuo "paradiso per il debug" dove solo una piccola parte del codice interagisce con lo stato globale e il resto del programma è puro e la purezza viene applicata dalla lingua.

Finché non insisti su " purezza " ;, Common Lisp supporta tutte le tue esigenze.

Mi chiedo perché stai cercando un linguaggio che incoraggi specificamente a confonderlo piuttosto che farlo semplicemente con un linguaggio che funzioni bene la programmazione funzionale e la programmazione OO? Potrebbe essere facilmente implementato con Python, Ruby, Perl o linguaggi interpretati simili. Inoltre, i linguaggi OO basati su C tendono a mescolare il C puro con le funzionalità OO, ad esempio l'Obiettivo C potrebbe essere facilmente scritto in modo tale da scegliere.

EDIT: sono stato reso consapevole di non essere corretto, ho lasciato questa risposta qui nel caso qualcuno possa imparare dal mio errore - vedi commenti.

Python, javascript, lisp comune, ruby, smalltalk, haskell e ocaml, fuori dalla cima della mia testa. Non è davvero una combinazione esotica.

Rubino! In Ruby, tutto è un oggetto (anche letterale) e ha anche il pieno supporto di programmazione funzionale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top