Ho notato che il supporto IDE non è affatto buono, ma il linguaggio stesso supporta linguaggi di programmazione funzionale in modo molto più pulito.
Ho notato che il supporto IDE non è affatto buono, ma il linguaggio stesso supporta linguaggi di programmazione funzionale in modo molto più pulito.
Ho programmato Scala per più di un anno, quindi cercherò di tornare indietro di un anno per rispondere a questa domanda.
I punti sopra erano più o meno ciò che pensavo di Scala prima di iniziare a impararlo.
Nel corso di un anno, ecco cosa ho scoperto:
Bene, penso che Scala sia troppo complesso. Sembra C ++ in quanto ha una miriade di modi diversi di fare le cose. Alcuni chiamerebbero questa "ricchezza", "espressività" o "potere", ma il tuo chilometraggio potrebbe variare. In molti progetti del mondo reale dovresti limitare artificialmente quali funzionalità linguistiche utilizzerai e quali no, in modo che tutti gli sviluppatori coinvolti possano parlare lo stesso sottoinsieme della lingua.
Per la programmazione funzionale preferisco Clojure , che è molto più semplice di Scala.
Inizia la guerra santa; -)
Circa un anno fa, mentre diventavo sempre più frustrato per il futuro dei prodotti della mia startup, se avessi continuato a utilizzare Java, ho deciso di provare a Scala. All'epoca stavo già programmando in JavaScript e Python, Ruby era anche una buona alternativa, ma stavo cercando un linguaggio tipizzato staticamente, preferibilmente uno che potesse essere eseguito sulla JVM.
Ho davvero provato ad apprezzare Scala, l'ho fatto davvero, ma ho trovato il codice assolutamente brutto e difficile da capire. Mi sono meravigliato che se Scala fosse la nostra migliore risposta a Java, allora ero sicuramente fregato e condannato a continuare a lavorare con una lingua che non mi piaceva dopotutto ...
Fortunatamente, non molto tempo dopo, ho scoperto Fantom . Oh uomo, l'ho amato! Per me, è stato come la risposta dello splendore americano alla burocrazia tedesca! Corrisponde ai requisiti che stavo cercando in Scala, ma molto più elegantemente . Aveva Vim , Eclipse e Netbeans integrazione, un bel < a href="http://www.talesframework.org/"> quadro web , maturo prodotti in esecuzione con esso , una piccola ma incredibilmente utile community ... Digitazione dinamica e statica! Ho gioito!
(Potrei continuare ma questo post è pensato per essere su Scala, non su Fantom, quindi mi fermo qui. La mia preferenza è chiaro post che confronta i due: non ho mai capito perché Fantom riceve così poca attenzione rispetto a Scala. Ma a quanto pare non sono l'unico, se ascolti questo podcast [ mp3 ] fino alla fine. )
Quando inizialmente mi dilettavo con Scala 2 anni fa, mi sembrava estraneo e intimidatorio. Ad un certo punto ho scoperto che il linguaggio di base è in realtà molto più semplice di Java, ma la sua sintassi e semantica sono così flessibili che è possibile creare nuovi costrutti di linguaggio come questo, anche senza una funzione macro. Da allora sono passato completamente a Scala per tutti i miei progetti Java, perché mi consente di scrivere senza troppo codice di codice.
Mi piace Clojure, ma ci sono situazioni in cui la piattaforma ha bisogno di te per compilare un bytecode statico (Android, applet, ...) e mentre puoi farlo, in Scala, è proprio lì.
Sebbene Scala ti permetta di risolvere molti problemi in modo funzionale, trovo spesso problemi in cui l'uso delle lezioni sembra più naturale. Ciò rende le cose un po 'più complesse, ma da nessuna parte vicino alle complessità e ai dolori del C ++.
Il più grande asporto per me quando ho iniziato a imparare il linguaggio è stato che avrei potuto programmare solo quello che avevo fatto in Java, solo senza il rumore (un po 'come quando avvii Groovy), ma alla fine vuoi provare ad immergerti più a fondo nel potere della lingua - cresce con te.
Informazioni sulla domanda IDE: dopo aver usato Emacs per tutto, tutti i miei problemi IDE sono andati via: -)
Mi piace Scala per molte ragioni, ma ce n'è una che viene spesso trascurata: la sua semplicità.
Scala potrebbe non essere semplice come, ad esempio, Oberon, ma è molto più semplice di altre lingue. La specifica della lingua di Scala è di ~ 160 pagine, la specifica della lingua Java è ~ 600 (solo la lingua, non la JVM o le librerie!), La specifica di linguaggio C # ECMA-334 (che AFAIK corrisponde a un sottoinsieme di Visual C # 2.0) è ~ 440 pagine (questo è senza cose come le query di query LINQ, espressioni lambda, metodi di estensione, co- e controvarianza generica, dynamic
, argomenti opzionali con valori predefiniti, argomenti di parole chiave, var
). Anche la bozza attuale per ECMAScript 5.1 è più grande a ~ 210 pagine. E naturalmente il mio linguaggio "predefinito", Ruby, il cui attuale ISO Draft pesa circa ~ 310 pagine, che specificano solo un sottoinsieme quasi insolitamente piccolo dell'intersezione di Ruby 1.8.6, 1.9.1 e 1.9.2.
Ecco cosa fa schifo su Scala:
Il puntatore nullo era una pessima idea per cominciare. Hoare ha definito il suo "errore da un miliardo di dollari", ma Scala è anche peggio. Ha oggetti denominati null, Null, None e Nil. null è per l'interoperabilità con Java. Null è il modulo del puntatore nullo, specifica del DOM W3C, None è ciò con cui Null dovrebbe essere stato sostituito e Nil è un qualcosa vuoto.
Quando i costrutti del linguaggio risultano essere hacky, di solito è il programmatore a dare la colpa e non la lingua. In Scala, tuttavia, il linguaggio principale contiene già classi di libreria il cui unico comportamento documentato è "Questo è un hack". Non ci credo? Cerca lo scaladoc per scala.xml.Group.
Non ultimo, Scala è mal documentato. Quasi nessuna delle classi scala nella documentazione ufficiale viene fornita con un codice di esempio. Scala è molto più difficile da imparare rispetto a Java e richiede una profonda conoscenza dell'informatica.
Per evitare di essere scambiato per un ladro di Scala, ecco cosa mi piace di questo:
Scala è complesso. Assolutamente no! La sua sintassi è estremamente flessibile e può essere personalizzata in molti modi (soprattutto operatori / notazione infisso) - e il sistema di tipi ha caratteristiche più diverse rispetto a qualsiasi altra lingua che conosco.
Quindi le cose non sono così dritte come ad es. in Haskell: Typeclasses per coprirli tutti.
Mentre Scala cerca di mettere insieme la programmazione funzionale, OO, la programmazione procedurale e le librerie java e le proprie idee, alla fine ci ritroviamo con molti concetti che in qualche modo sembrano andare "nella stessa direzione ":
La scelta tra di loro sembra difficile all'inizio e ci si potrebbe chiedere facilmente se qualcuno abbia trovato la soluzione corretta a qualche problema. È persino facilmente possibile produrre materiale hacker abusando di implicit
s.
Ma la cosa interessante è: Scala funziona. A volte è difficile capire perché (specialmente capire attraverso quali conversioni implicite + ereditarietà + ... alcuni oggetti hanno funzionalità X
), ma non devi preoccupartene per la maggior parte delle volte.
Scrivi Scala il più semplice possibile e funzionerà. Non farti confondere da tutto ciò che è possibile e usa quello di cui hai bisogno. E se hai bisogno di qualcosa, puoi essere sicuro che in qualche modo Scala ce l'ha;)
E più ottieni, più sarai in grado di personalizzare Scala con operatori, impliciti, monadi, sintassi funky ... e infine ottenere qualcosa vicino a un DSL che risolverà perfettamente il tuo problema.
Dopotutto, hai sempre la possibilità di usare semplicemente Scala come un Java molto migliore con sintassi più semplice, più semplice, inferenza di tipo e alcune caratteristiche funzionali.
È un linguaggio eccellente che è più semplice di Java in molti modi.
Alla maggior parte delle persone non piacerà, programmatore Java o no, per gli stessi motivi per cui molte persone, programmatori o meno, non amano imparare nuovi linguaggi di programmazione. Sospetto che la maggior parte delle persone che hanno imparato un linguaggio di programmazione non amasse nemmeno l'apprendimento.
Se sei preoccupato che un linguaggio sia complicato come il C ++, eviterei Clojure come la peste. Piagnucolare che Scala sia più complicato di Clojure è diventato l'argomento di riserva per le persone che sono completamente all'oscuro di una o entrambe le lingue.
Clojure ha macro, il che significa che puoi modificare la sintassi della lingua quanto vuoi, dandoti non solo "una miriade di modi diversi di fare le cose", ma un numero quasi infinito di modi di fare le cose. E nessuna di questa nuova sintassi che i programmatori stanno creando con i macro verrà documentata ovunque nelle specifiche del linguaggio.
"Ma possiamo evitare l'uso di macro o regolare quali sono consentiti nel nostro codice", dici. Congratulazioni, ora stai "per limitare artificialmente quali funzionalità linguistiche utilizzerai e quali no", che è esattamente ciò che i balbettanti idioti che usano Clojure di Scala hanno usato come motivo per evitare di iniziare con Scala.
Mi piacciono molto i tipi più granulari della libreria Scala. Sembra che la nuova biblioteca delle collezioni sia stata ben congegnata. Mi piace anche come riduca la quantità di codice richiesta per le classi semplici e i concetti funzionali che aggiunge. La sua inferenza di tipo è anche molto utile. Sembra Java senza le ruote di addestramento. Dopo aver usato C # per un po ', Scala si sente effettivamente come un concorrente, con Java ancora utile ma lasciato indietro.
Come programmatore Java, inizialmente ho trovato interessante Scala. Tuttavia, dopo averlo dilettato per un po '(e incappato in quasi tutti i lati positivi / negativi già elencati da altri), mi sentivo molto "meh" verso di esso. I miglioramenti del linguaggio sono compensati dalla minore disponibilità di strumenti. Non sono riuscito a trovare alcun motivo per passare. Va bene, ma non è "abbastanza buono" per giustificare il passaggio. Non ha nemmeno quel fattore di eccitazione soggettiva (come sembra Clojure).
Leggi altre domande sui tag programming-languages java language-design scala