2009-09-21 2 views
6

Sto scrivendo un'applicazione Java utilizzando Struts 2, ma ora mi piacerebbe renderlo un progetto ibrido Java & Scala. Non ho molta esperienza con Scala, ma ho imparato Haskell anni fa al college - mi è piaciuto molto il paradigma programmato funzionale, ma ovviamente in classe ci sono stati dati solo problemi che erano estremamente adatti a una soluzione funzionale! Nel mondo reale, penso che un codice sia più adatto a uno stile imperativo, e voglio continuare ad usare Java per questo (so che Scala supporta la sintassi imperativa, ma non sono pronto ad andare nella direzione di un puro progetto Scala ancora).Quali parti di un'applicazione Java dovrebbero essere scritte in Scala?

In un progetto ibrido, come si può decidere cosa programmare in Java e cosa programmare in Scala?

risposta

3

Chiedi queste domande del tuo progetto: "Quali operazioni richiedono effetti collaterali?" e "Quale funzionalità è già ben coperta dalle librerie Java?" Quindi implementa il resto in Scala.

Tuttavia, vorrei sottolineare che i progetti ibridi sono per loro natura più difficili dei progetti stand-alone, in quanto è necessario utilizzare più lingue/ambienti. Quindi, dato che pretendi di non avere molta esperienza con Scala, ti consiglio di giocare prima con alcuni progetti di giocattoli, forse un sottoinsieme del tuo obiettivo completo. Ciò ti darà anche un'idea di dove dovrebbe avvenire la divisione.

+0

Punto preso ... per fortuna è un progetto di casa, quindi posso sfruttarlo come esperienza di apprendimento. Se si rivelerà un successo, prenderò certamente in considerazione l'idea di evangelizzare Scala in ufficio. –

+0

Sì, sono d'accordo. Il progetto multilingue è molto problematico. Stiamo vivendo la stessa cosa qui. –

+0

In realtà sono un fan di JVM + ... Sto solo sottolineando che per farlo in modo efficace, è molto più semplice imparare a lavorare su un 100% progetto prima. –

10

due cose:

  1. 99% del codice Java può essere espresso in Scala
  2. È possibile scrivere i progetti che supportano Java misto + compilation Scala. Il tuo codice Scala può chiamare il tuo codice Java e il tuo codice Java può chiamare il tuo codice Scala. (Se vuoi fare quest'ultima, ti suggerisco di definire l'interfaccia in Java e poi di implementarla in Scala. Altrimenti chiamare il codice Scala da Java può risultare un po 'brutto.)

Quindi la risposta è: qualunque sia parti che vuoi Il tuo codice Scala non ha bisogno di essere puramente funzionale. Il tuo codice Scala può chiamare librerie Java. Quindi praticamente tutte le parti che potresti scrivere in Java potresti anche scrivere in Scala.

Ora, alcune considerazioni più pratiche. Quando proviamo per la prima volta su Scala, alcune persone scelgono parti relativamente isolate e non mission-critical del loro programma per scrivere in Scala. I test unitari sono un buon candidato se ti piace questo approccio.

Se hai familiarità con Java e hai imparato Haskell in passato, ti suggerisco di considerare Scala come un "migliore Java". Fondamentalmente, Scala si compila con il bytecode JVM che è molto, molto simile a ciò che esce da Java. L'unica differenza è che Scala è più "produttivo": produce più bytecode per riga di codice rispetto a Java. Scala ha molte cose in comune con Haskell (funzioni di prima classe, le incomprensioni sono come la notazione di Haskell, l'inferenza di tipo limitata), ma è anche molto diversa (non è pigra di default, non è pura). Quindi puoi utilizzare alcune delle tue intuizioni da Haskell per ispirare il tuo stile Scala, ma "sotto la cappa" è tutto il bytecode Java.

6

Nello spirito della tua domanda, ti consiglio di scrivere in Scala qualsiasi codice che implichi una pesante manipolazione delle raccolte o che gestisca XML.

La libreria di raccolta di Scala è la principale funzionalità di Scala e con il suo utilizzo noterete una riduzione notevole di LoC. Sì, ci sono alternative Java, come la raccolta di raccolte di Google, ma hai chiesto cosa dovresti scrivere in Scala. :-)

Scala ha anche la gestione nativa di XML.Potresti trovare difficile la transizione, se cerchi di prendere il codice DOM e farlo funzionare su Scala. Ma se tu, invece, provi ad affrontare il problema e la prospettiva di Scala e lo scrivi da zero per Scala, avrai dei guadagni.

Suggerirei di utilizzare anche Actors, ma non sono sicuro di quanto bene si possa integrare con il codice Struts 2 su Java. Ma se hai codice concorrente, dai a Actors in Scala un pensiero.

5

Potrebbe sembrare sciocco, ma perché non scrivere il tuo intero progetto in Scala? È un linguaggio meraviglioso che è molto più espressivo di Java pur mantenendo l'accesso compatibile con i binari alle librerie Java esistenti.