Devo scegliere un linguaggio di programmazione funzionale?

10

Recentemente sono stato più preoccupato del modo in cui scrivo il mio codice. Dopo aver letto alcuni libri sui modelli di progettazione (e sulla loro eccessiva implementazione, ne sono certo), ho spostato il mio modo di pensare molto per incapsulare ciò che cambia. Tendo a notare che scrivo meno interfacce e più codice orientato al metodo, in cui mi piace abbozzare la vita in vecchie classi con predicati, azioni e altri compiti delegati. Tendo a pensare che spesso le azioni cambiano, quindi le incorporo. Spesso, anche se non sempre, suddivido le interfacce in un unico metodo, quindi preferisco utilizzare un delegato per l'attività anziché forzare il codice client per creare una nuova classe.

Quindi immagino che mi colpisca. Dovrei invece fare la programmazione funzionale?
Modifica: Potrei avere un'idea sbagliata sulla programmazione funzionale.

Attualmente il mio linguaggio preferito è C #, e provengo da uno sfondo C ++. Lavoro come sviluppatore di giochi ma attualmente sono disoccupato.

Ho una grande passione per l'architettura. Le mie virtù sono il codice pulito, flessibile, riutilizzabile e gestibile. Non so se sono stato avvelenato da questi modi o se è per il meglio. Sto avendo una febbre di refactoring o dovrei andare avanti? Capisco che questa potrebbe essere una domanda su "utilizzare lo strumento giusto per il lavoro" , ma mi piacerebbe sentire i tuoi pensieri.

Devo scegliere una lingua funzionale? Uno dei miei fattori di paura è lasciare il comfort di Visual Studio.

    
posta Statement 12.03.2011 - 23:10
fonte

6 risposte

5

YES

Imparare nuove cose dovrebbe essere divertente. E imparare un nuovo modo di programmare dovrebbe renderti un programmatore migliore. Controlla uno di Haskell o di Erlang, entrambi sono funzionali ma sono molto diversi. Se scegli Haskell, vai a trovare alcuni discorsi di "Simon Payton Jones" su youtube o podcast. Il ragazzo è un grande oratore.

    
risposta data 13.03.2011 - 11:02
fonte
14

Holy * * * *. Nessun proiettile d'argento. Step-down. Rilassati, fai un respiro profondo.

Solo perché hai uno strumento nella tua casella degli strumenti, non significa che sei obbligato a usarlo. Concentrati sull'attività da svolgere, ad esempio scrivendo un programma che funziona e refactor quando il codice ha un cattivo odore. Non incapsulare e astrarre ogni piccolo dettaglio solo perché potrebbe cambiare un giorno nel futuro. IMO è davvero molto meglio iniziare subito, KISS & YAGNI e reagisci ai mutevoli requisiti quando effettivamente cambia .

Non penso che nessuno qui possa dirti se un linguaggio funzionale è più adatto alle tue esigenze. Perché non ci hai detto su cosa stai lavorando.

    
risposta data 12.03.2011 - 23:16
fonte
12

Puoi scegliere F # . È un linguaggio funzionale .NET, che ti permetterà di usare Visual Studio e riutilizzare molte delle tue conoscenze di .NET. Ovviamente, gli assiemi si integrano perfettamente con gli assembly C # (consentendo di combinare facilmente C #, C ++ / CLI e F # in un progetto). Il supporto per F # viene fornito con VS Pro o meglio, non sono sicuro che sia abilitato di default però.

    
risposta data 12.03.2011 - 23:44
fonte
6

IMO, vale la pena provare un linguaggio funzionale. Anche se non lo utilizzi mai direttamente in un prodotto rilasciato, impararlo quasi certamente ti aiuterà a dare una prospettiva / punto di vista un po 'diversa sulla programmazione. Anche se finisci per continuare a fare tutta la tua "vera" codifica in C #, è probabile che ti aiuterà a migliorare il codice che scrivi in C #.

Come altri hanno già detto, la scelta ovvia per qualcuno abituato a Visual Studio è F #, che è fondamentalmente un derivato di Ocaml / Caml / ML. IMO, questa è stata una buona scelta da parte di Microsoft per introdurre le persone alla programmazione funzionale - è un linguaggio funzionale completo, ma non ha una sintassi quasi straniera come alcuni (ad esempio, mentre i linguaggi basati su Lisp fanno hanno dei veri vantaggi, i principianti hanno quasi sempre difficoltà a leggere)

    
risposta data 13.03.2011 - 00:15
fonte
2

Sì, dovresti.

Se scegli un puro, come Haskell, imparerai non solo una nuova lingua, ma un nuovo modo di pensare. Questo può aiutarti in seguito anche nel tuo lavoro proceurale / OO.

F #, d'altra parte, non è puro, quindi puoi facilmente perdere ciò che è importante nella programmazione funzionale. Puoi, per così dire, continuare a scrivere programmi procedurali che mutano qui una variabile, eseguire alcuni effetti collaterali, proprio nella sintassi F #.

    
risposta data 21.03.2011 - 17:20
fonte
1

Se stai già utilizzando c # non hai bisogno di una nuova lingua - con la combinazione di metodi di estensione, lambda e tipi generici di Func / Action è abbastanza facile scrivere codice funzionale in C # - in questo modo puoi usare un stile funzionale negli algoritmi in cui ha più senso senza la necessità di cambiare l'intera applicazione.

    
risposta data 13.03.2011 - 02:10
fonte