Che cosa pensano gli sviluppatori Java di Scala? [chiuso]

19

Ho notato che il supporto IDE non è affatto buono, ma il linguaggio stesso supporta linguaggi di programmazione funzionale in modo molto più pulito.

    
posta Richard Warburton 11.12.2010 - 09:10
fonte

10 risposte

18

Ho programmato Scala per più di un anno, quindi cercherò di tornare indietro di un anno per rispondere a questa domanda.

  • Il codice Scala è più conciso rispetto al codice Java (senza setter o getter, un sacco di informazioni sul tipo può essere dedotto)
  • Il supporto integrato per XML letteral è molto accattivante.
  • La compatibilità e l'interoperabilità delle librerie Java è ottima
  • Il supporto per certi idiomi funzionali è rinfrescante (per comprensione, chiusura, funzioni lambda, mappa, piega, riduzione)
  • Non sembra esserci una funzionalità interessante che il creatore del linguaggio non ha voluto includere

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:

  • L'acquisto del libro scale è stato un grande investimento e mi ha permesso di risparmiare ore di apprendimento delle cose da solo
  • La sintassi ha alcune stranezze e talvolta a volte ero davvero perplesso sul motivo per cui qualcosa non era valido. Il trade off è una volta che sei familiare, il codice ha meno confusione ed è più facile da leggere. Nota che questo non è un problema se leggi piuttosto che scrivere codice.
  • La libreria di raccolta in 2.8 è un piacere da usare. È difficile tornare a quello Java.
  • XML letteral è bello, ma al di là di alcune cose basilari, ho dovuto raggiungere l'ecosistema della libreria Java. È comunque conveniente.
  • L'utilizzo di librerie Java da Scala è semplicissimo e conveniente. Usare le classi di Scala da Java è un po 'più complicato, ma funziona.
  • Sono passato all'edizione comunitaria IntelliJ IDEA e, sebbene non sia perfetto, è più che sufficiente.
  • Il creatore del linguaggio ha davvero pensato al set di funzionalità e tutto funziona davvero bene insieme. Il supporto orientato agli oggetti è migliore rispetto a Java (con i tratti) e puoi eseguire la programmazione funzionale.
  • È un linguaggio che apparentemente alcuni sviluppatori Java odiano con passione. Per me, ha riportato la gioia della programmazione.
risposta data 12.12.2010 - 02:49
fonte
21

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; -)

    
risposta data 11.12.2010 - 10:18
fonte
13

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. )

    
risposta data 11.12.2010 - 17:22
fonte
9

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: -)

    
risposta data 11.12.2010 - 17:27
fonte
9

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.

    
risposta data 12.12.2010 - 00:54
fonte
9

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:

  • Ho meno eccezioni. Non ho mai avuto una ClassCastException e pochissime NullPointerExceptions quando interagisco con Java.
  • Il codice è molto più breve e più conciso di Java
  • È intellettualmente stimolante. Java si sente come un linguaggio bebè se confrontato.
risposta data 27.12.2010 - 16:21
fonte
9

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 ":

  • Valori impliciti
  • Funzioni implicite
  • esistenziali
  • I caratteri jolly
  • Tratti
  • Interfacce
  • Classi astratte
  • Classi di casi
  • Tipi strutturali
  • Vincoli generici
  • Visualizza limiti
  • Tipi anonimi

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.

    
risposta data 27.12.2010 - 17:17
fonte
6

È 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.

    
risposta data 11.12.2010 - 15:29
fonte
4

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.

    
risposta data 11.12.2010 - 21:15
fonte
2

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).

    
risposta data 27.12.2010 - 19:55
fonte

Leggi altre domande sui tag