Prima di leggere questo post, per favore leggi i miei due post precedenti su “Scala Basic” e “Scala Intermediate” Domande e Risposte per un’idea di base sul linguaggio Scala.
Domande di Intervista Avanzate su Scala
In questo post, discuteremo alcune Domande di Intervista Avanzate su Scala che riguardano concetti avanzati di Scala e anche alcuni concetti legati a progetti in tempo reale. Nota: Poiché questa lista è diventata già molto lunga, pubblicherò un altro post con le domande e risposte rimanenti. Ti prego di fare riferimento a quel post su: “Scala Intermediate e Advanced Domande e Risposte per l’Intervista” Discuteremo anche le Domande e Risposte sull’Concurrency e Parallelism in Scala/Java, che sono utili per uno sviluppatore Scala/Java Senior o Esperto.
Domande di Intervista Avanzate su Scala
In questa sezione, elencheremo tutte le domande d’intervista intermedie su Scala e nella prossima sezione ne discuteremo in dettaglio.
- Qual è l’ultima versione di Scala attualmente disponibile? Qual è il cambiamento o l’aggiornamento principale in Scala 2.12?
- Cosa è Option in Scala? Cosa sono Some e None? Qual è il pattern di progettazione Option/Some/None in Scala?
- Cosa è Either in Scala? Cosa sono Left e Right in Scala? Spiega il pattern di progettazione Either/Left/Right in Scala?
- Qual è il costrutto equivalente all’Option di Scala in Java SE 8? Qual è l’uso di Option in Scala?
- Quali sono i vantaggi della Programmazione Funzionale (FP) o i vantaggi delle Funzioni Pure?
- Quali sono i Framework basati su Scala popolari per lo sviluppo di Servizi Web RESTful o API REST?
- Qual è il miglior Framework per generare la documentazione delle API REST per le applicazioni basate su Scala?
- Come Hibernate per le applicazioni basate su Java, quali sono i Framework ORM popolari disponibili per l’uso nelle applicazioni basate su Play/Scala?
- Qual è il miglior strumento per sviluppare applicazioni Play/Scala per persistere i dati nel datastore NoSQL MongoDB?
- Clienti popolari che utilizzano Play e Scala per sviluppare le loro applicazioni?
- Qual è il miglior linguaggio da utilizzare con il framework Play: Scala o Java?
- Come Scala supporta applicazioni altamente scalabili e ad alte prestazioni?
- Quali sono gli strumenti di build disponibili per lo sviluppo di applicazioni basate su Play e Scala?
- Cos’è SBT? Qual è il miglior strumento di build per sviluppare applicazioni Play e Scala?
- Quali sono i framework disponibili per il testing delle unità, il testing funzionale e/o il BDD per le applicazioni basate su Play e Scala?
- Qual è il miglior strumento per la copertura del codice disponibile per le applicazioni basate su Play e Scala?
- Qual è il miglior strumento di controllo dello stile Scala disponibile per le applicazioni basate su Play e Scala?
- Quali IDE supportano lo sviluppo di applicazioni basate su Play e Scala e come?
- Qual è il framework predefinito per il testing delle unità e il testing funzionale in Play? Qual è lo strumento di compilazione predefinito per Play? Qual è il motore di template predefinito per Play? Quale server web integrato è disponibile nel framework Play?
- Perché Scala è migliore di Java? Quali sono i vantaggi di Scala rispetto a Java (Java 8)? Rispetto a Java, quali sono i principali vantaggi o benefici di Scala?
- Cosa è una funzione anonima in Scala? Cosa è un letterale di funzione in Scala? Quali sono i vantaggi di una funzione anonima/letterale di funzione in Scala?
- Cosa è una funzione di ordine superiore (Higher-Order Function, HOF)?
- Quali sono le differenze tra una classe case e una classe normale?
- Quali sono i vantaggi dello stack Play/Scala nello sviluppo di applicazioni web?
- Cosa è il passaggio per nome (call-by-name)? Scala e Java supportano il passaggio per nome? Qual è la differenza tra i parametri di una funzione passati per valore (call-by-value) e per nome (call-by-name)?
- Quali sono le costruzioni OOP di Java non supportate da Scala? Quali sono le costruzioni OOP di Scala non supportate da Java? Quali sono le nuove costruzioni OOP introdotte da Scala, ma non supportate da Java?
- Quali sono i framework MVC più popolari per il linguaggio Scala nello sviluppo di applicazioni web?
- Quali sono le principali differenze tra la struttura di un progetto Maven basato su Java e un progetto Maven basato su Scala?
- Cos’è un Extractor in Scala? Qual è la differenza tra un Costruttore e un Extractor in Scala? Qual è l’utilizzo di un Extractor in Scala?
- Qual è l’utilizzo di ‘???’ nelle applicazioni basate su Scala?
- Spiega la principale differenza tra List e Stream nell’API di collezioni di Scala. Come possiamo dimostrare questa differenza? Quando scegliamo di utilizzare Stream?
- Qual è la differenza tra :: e #:: in Scala? Qual è la differenza tra ::: e #::: in Scala?
- Se voglio diventare un sviluppatore Fullstack Scala, quale stack tecnologico dovrei imparare?
Domande e risposte avanzate su Scala per colloqui
In questa sezione, prenderemo ogni singola domanda dalla lista precedente e la discuteremo in dettaglio con esempi appropriati (se necessario). Se desideri capire questi concetti in modo approfondito con esempi, ti prego di leggere i miei articoli precedenti nella sezione Tutorial su Scala.
Qual è la versione più recente di Scala? Qual è il principale cambiamento o aggiornamento in Scala 2.12?
La versione stabile attuale di Scala è la 2.11.7. Supporta Java SE 7. Il principale cambiamento o aggiornamento nella versione Scala 2.12 è che supporta solo Java SE 8 o versioni successive. Scala 2.12 non è compatibile binariamente con la serie 2.11.x. È ancora disponibile solo nelle versioni Mile Stone Builds.
Cos’è l’Opzione in Scala? Cosa sono Some e None? Qual è il design pattern Opzione/Some/None in Scala?
In Scala, Option viene utilizzato per rappresentare valori opzionali che possono esistere o non esistere. Option è una classe astratta. Option ha due sottoclassi: Some e None. Tutti e tre (Option, Some e None) sono definiti nel pacchetto “scala” come “scala.Option”. Option è una collezione limitata in Scala, che contiene zero o un elemento. Se Option contiene zero elementi, allora è None. Se Option contiene un elemento, allora è Some. Some viene utilizzato per rappresentare un valore esistente. None viene utilizzato per rappresentare un valore inesistente. Esempio:-
def get(val index: Int): Option[String]
Supponiamo che questo metodo provenga da List. Questo metodo ha un tipo di ritorno di Option[String]. Se List contiene elementi, questo metodo get restituisce l’elemento “Some[String]” disponibile in quella posizione dell’indice. Altrimenti, restituisce “None” (cioè nessun elemento). Some è una case class e None è un oggetto. Poiché entrambi sono case class/oggetto, possiamo usarli molto bene nell’Pattern Matching. La combinazione di tutte e tre queste definizioni è conosciuta come Pattern di Progettazione Option/Some/None in Scala.
Cosa è Either in Scala? Cosa sono Left e Right in Scala? Spiega il Pattern di Progettazione Either/Left/Right in Scala?
In Scala, Either è una classe astratta. Viene utilizzata per rappresentare un valore di due tipi possibili. Prende due parametri di tipo: Either[A,B]. Esattamente ha due sottotipi: Left e Right. Se Either[A,B] rappresenta un’istanza A, significa che è Left. Se rappresenta un’istanza B, significa che è Right. Questo è conosciuto come Pattern di Progettazione Either/Left/Right in Scala.
Qual è la costruzione equivalente di Option in Scala nel Java SE 8? Qual è l’uso di Option in Scala?
Option di Scala è simile a Optional in Java SE 8. Java SE 8 ha introdotto una nuova classe di utilità Optional per rappresentare l’esistenza o la non esistenza di un certo valore. Optional è disponibile nel package java.util. Sia Option in Scala che Optional in Java SE 8 sono utilizzati per rappresentare valori opzionali. Entrambi sono utilizzati per evitare controlli null indesiderati e NullPointerException.
Quali sono i vantaggi della Programmazione Funzionale (FP) o i vantaggi delle Funzioni Pure?
I seguenti sono i vantaggi della Programmazione Funzionale (FP) o dei vantaggi delle Funzioni Pure:
- Più Modulare
- Facile da capire o Facile da ragionare
- Facile da testare
- Meno incline agli errori
- Facile da riutilizzare
- Facile da parallelizzare e generalizzare
Quali sono i framework Scala più popolari per sviluppare servizi Web RESTful o API REST?
Esistono molti framework basati su Scala per lo sviluppo di servizi Web RESTful. I framework più popolari sono:
- Play Framework
In Play, chiamiamo gli URL delle API REST come percorsi. Collociamo tutti i percorsi in un unico luogo nel framework Play. È un framework web stateless per sviluppare facilmente API REST.- Framework Scalatra
È un framework web basato su Scala molto semplice e facile da usare per sviluppare API REST.- Framework Spray
È molto conciso e costruito sopra il framework Akka, quindi è meglio sviluppare API REST utilizzando il modello Actor.- Framework Lift
Permette il routing utilizzando il concetto di Pattern Matching.
Qual è il miglior framework per generare la documentazione delle API REST per le applicazioni basate su Scala?
Swagger è il miglior strumento per questo scopo. È uno strumento molto semplice e open-source per generare la documentazione delle API REST con JSON per le applicazioni basate su Scala.
- Se usiamo Play with Scala per sviluppare la tua API REST, quindi utilizziamo il modulo play-swagger per la documentazione dell’API REST.
- Se usiamo Spray with Scala per sviluppare la tua API REST, quindi utilizziamo il modulo spray-swagger per la documentazione dell’API REST.
Come Hibernate per le applicazioni basate su Java, quali sono i framework ORM popolari disponibili per l’uso nelle applicazioni basate su Play/Scala?
Come JPA, Hibernate e Toplink, ci sono molti framework ORM da utilizzare nelle applicazioni basate su Play/Scala. I framework ORM più popolari per le applicazioni basate su Play/Scala sono:
- Slick
- Anorm
- SORM(Scala ORM)
- Squeryl
Qual è il miglior strumento per sviluppare applicazioni Play/Scala per persistere i dati nel database NoSQL MongoDB?
ReactiveMongo è il miglior driver Scala per sviluppare applicazioni Play/Scala per persistere i dati nel database NoSQL di MongoDB. Supporta operazioni I/O completamente non bloccanti e asincrone.
Quali sono i clienti popolari che utilizzano Play e Scala per sviluppare le loro applicazioni?
Migliaia di clienti utilizzano Play e Scala in produzione. Di seguito è riportata una lista dei clienti più popolari che utilizzano attivamente Play e Scala.
- The Guardian
- Ocado
- LuchidChart
- GOV.UK
Qual è il miglior linguaggio da utilizzare con il framework Play: Scala o Java?
Play 2 è completamente scritto in Scala. Se utilizziamo Java con il framework Play, dobbiamo affrontare molti problemi perché Java non supporta tutte le funzionalità FP complete. Scala è la migliore opzione da utilizzare con il framework Play per sviluppare applicazioni altamente scalabili, con migliori prestazioni in termini di concorrenza/parallelismo e bassa latenza, perché:
- Play 2 è completamente scritto in Scala.
- Supporta tutte le funzionalità FP.
- È più un linguaggio di espressione che Java.
- Supporta facilmente il modello di attori Akka.
- Supporta alcune nuove funzionalità di OOP come i Traits.
- I template integrati di Play sono sviluppati in Scala
Come Scala supporta applicazioni ad alta scalabilità e ad alte prestazioni?
Dato che Scala supporta la programmazione multi-paradigma (sia OOP che FP) e utilizza il modello di concorrenza degli attori, possiamo sviluppare facilmente applicazioni altamente scalabili e ad alte prestazioni.
Quali sono gli strumenti di compilazione disponibili per sviluppare applicazioni basate su Play e Scala?
I seguenti tre strumenti di compilazione sono i più popolari per sviluppare applicazioni Play e Scala:
- SBT
- Maven
- Gradle
Cosa è SBT? Qual è il miglior strumento di build per sviluppare applicazioni Play e Scala?
SBT sta per Scala Build Tool. È uno strumento di build semplice per sviluppare applicazioni basate su Scala. La maggior parte delle persone utilizza lo strumento di build SBT per applicazioni Play e Scala. Ad esempio, il plugin Scala di IntelliJ IDEA utilizza SBT come strumento di build predefinito per questo scopo.
Quali sono i framework di Unit Testing, Functional Testing e/o BDD disponibili per le applicazioni basate su Play e Scala?
I seguenti sono i framework di Unit Testing, Functional Testing e/o BDD più popolari disponibili per le applicazioni basate su Play/Scala:
- Spec2
- ScalaTest
- ScalaCheck
- Mokito
Qual è il miglior strumento per la copertura del codice disponibile per le applicazioni basate su Play e Scala?
SCoverage è lo strumento per la copertura del codice per le applicazioni basate su Play e Scala. SCoverage sta per Scala Code-coverage tool. Ha tre plugin separati per supportare i seguenti strumenti di compilazione:
- SBT
- Maven
- Gradle
Qual è il miglior strumento di controllo dello stile Scala disponibile per le applicazioni basate su Play e Scala?
Come Checkstyle per le applicazioni basate su Java, Scalastyle è il miglior strumento di controllo dello stile Scala disponibile per le applicazioni basate su Play e Scala. Scalastyle osserva il nostro codice sorgente Scala e indica potenziali problemi. Ha tre plugin separati per supportare i seguenti strumenti di compilazione:
- SBT
- Maven
- Gradle
Ha due plugin separati per supportare i seguenti due IDE:
- IntelliJ IDEA
Quali IDE supportano lo sviluppo di applicazioni basate su Play e Scala e come?
I seguenti due IDE popolari supportano lo sviluppo di applicazioni basate su Play e Scala:
- IntelliJ IDEA
- Eclipse IDE
Lo fanno utilizzando plugin Scala come Eclipse IDE ha un’IDE Scala per Eclipse per supportare lo sviluppo di applicazioni basate su Play e Scala. IntelliJ IDEA ha un plug-in come “Scala Plugin for IntelliJ IDEA” per supportare applicazioni basate su “Scala, SBT e Play 2 Framework”.- Qual è il framework di testing unitario e funzionale predefinito per Play? Qual è lo strumento di compilazione predefinito per Play? Qual è il motore di template predefinito per Play? Qual è il server Web integrato disponibile nel framework Play?
Il framework Play utilizza il framework di testing unitario e funzionale predefinito Spec2. È molto facile testare le applicazioni basate su Play/Scala utilizzando il framework Spec2. Il template predefinito del framework Play è “Twirl”. È stato sviluppato in Scala. Utilizzando questi template, è possibile sviluppare facilmente applicazioni basate su Play/Scala. Il server Web integrato o predefinito disponibile per il framework Play è il Netty Server.
Perché Scala è migliore di Java? Quali sono i vantaggi di Scala rispetto a Java (Java 8)? Confrontati con Java, quali sono i principali vantaggi o benefici di Scala?
Perché Scala supporta le seguenti funzionalità extra, è migliore di Java 8:
- Funzionalità FP complete
- Linguaggio di espressione più ampio
- Pattern Matching
- Migliore supporto per il modello Akka Actor
- Risoluzione automatica del problema del diamante di ereditarietà con i Trait
- Programmazione IO asincrona e non bloccante usando il framework Akka
- API di streaming completamente reattiva
Cosa è una Funzione Anonima in Scala? Cosa è un Letterale di Funzione in Scala? Quali sono i vantaggi di una Funzione Anonima/Letterale di Funzione in Scala?
Una funzione anonima è anche una funzione ma non ha un nome di funzione. È anche nota come letterale di funzione. I vantaggi di una funzione anonima/letterale di funzione in Scala:
- Possiamo assegnare un letterale di funzione a una variabile
- Possiamo passare un letterale di funzione a un’altra funzione/metodo
- Possiamo restituire un letterale di funzione come risultato/valore di ritorno di un’altra funzione/metodo.
Cosa è una funzione di ordine superiore (HOF)?
Una funzione di ordine superiore (HOF) è anche una funzione ma che esegue una, due o entrambe le seguenti cose:
- Prende altre funzioni come argomenti
- Restituisce funzioni come risultati
Quali sono le differenze tra una classe Case e una classe Normale?
Una classe Case è anche una classe, tuttavia quando la confrontiamo con una classe normale, fornisce i seguenti extra o benefici:
- Per impostazione predefinita, i parametri del costruttore della classe Case sono ‘val’. Non è necessario dichiarare i parametri con ‘val’.
- Per impostazione predefinita, i parametri del costruttore della classe Case diventano campi della classe.
- Questi metodi vengono aggiunti automaticamente: toString, equals, hashCode, copy. apply e unapply.
- Viene automaticamente creato l’oggetto Companion.
- Non è necessario utilizzare la parola chiave ‘new’ per creare un’istanza della Case Class.
- Semplice da utilizzare nel Pattern Matching.
Tutte queste funzionalità sono aggiunte dal compilatore Scala in fase di compilazione. Non è possibile con una classe normale.
Quali sono i vantaggi dello stack Play/Scala per lo sviluppo di applicazioni web?
I seguenti sono i principali vantaggi dello stack Play/Scala per lo sviluppo di applicazioni web:
- Open Source
Play è un framework open source e software libero per lo sviluppo di applicazioni web. – Migliore produttività
La funzionalità di ricarica automatica di Play migliora la produttività dello sviluppatore. Non è necessario compilare, distribuire e testare le modifiche. Basta apportare le modifiche e aggiornare la pagina per vederle. – Stateless e facile da sviluppare API REST
Play è un modello stateless basato su HTTP per servire richieste web, quindi è molto facile sviluppare API REST o servizi web RESTful. – Migliore gestione degli errori
Se sviluppiamo la nostra applicazione web utilizzando il framework Play, informa tutti gli errori nel browser in un formato molto utile. Mostra il messaggio di errore, la posizione del file, il numero di riga in cui si è verificato l’errore, evidenziando il frammento di codice per comprendere facilmente l’errore. – Elevate performance e migliore scalabilità con Reactive
Il framework Play è sviluppato seguendo i pattern di design reattivo ed è costruito su Netty sever per utilizzare la funzionalità di I/O non bloccante. Grazie a questa caratteristica, possiamo sviluppare applicazioni altamente scalabili e performanti molto facilmente. – Facile da estendere
Play è un framework molto flessibile e supporta lo sviluppo di plug-in molto facili da estendere per migliorare le sue funzionalità e la sua funzionalità. – Alta concorrenza e migliore parallelismo
Poiché sia Scala che Play supportano la programmazione funzionale, è molto facile sviluppare applicazioni ad alta concorrenza e migliore parallelismo perché la programmazione funzionale supporta l’immobilità, le funzioni pure (funzioni senza effetti collaterali), il pattern matching, il modello di attori, ecc. – Migliore riutilizzabilità, facile da testare e più modulare
Poiché sia Scala che Play supportano la programmazione funzionale, possiamo sviluppare applicazioni più modulari e riutilizzabili. È anche molto facile testare applicazioni più modulari.
Quali sono i costrutti OOP di Java non supportati da Scala? Quali sono i costrutti OOP di Scala non supportati da Java? Quali sono i nuovi costrutti OOP introdotti da Scala, ma non supportati da Java?
Costrutti OOP di Java non supportati da Scala:
- Non c’è il concetto di interfaccia in Scala
- Non c’è il concetto di Enum in Scala
Costrutti OOP di Scala non supportati da Java O I nuovi costrutti OOP introdotti da Scala, ma non supportati da Java:
- Traits di Scala
- Risoluzione automatica del problema del Diamante nell’Ereditarietà.
Cos’è il call-by-name? Scala e Java supportano il call-by-name? Qual è la differenza tra i parametri di funzione call-by-value e call-by-name?
Il call-by-name significa valutare i parametri del metodo/funzione solo quando ne abbiamo bisogno o li accediamo. Se non li utilizziamo, allora non li valuta. Scala supporta sia i parametri di funzione call-by-value che call-by-name. Tuttavia, Java supporta solo il call-by-value, ma non il call-by-name. Differenza tra call-by-value e call-by-name: La principale differenza tra questi due è descritta di seguito:
- Nel call-by-name, i parametri di funzione vengono valutati solo quando sono necessari ma non quando la funzione viene chiamata.
- Nel call-by-value, i parametri di funzione vengono valutati quando la funzione viene chiamata.
- Nel call-by-value, i parametri vengono valutati prima di eseguire la funzione e vengono valutati solo una volta, indipendentemente da quante volte li abbiamo utilizzati in quella funzione.
- Nel call-by-name, i parametri vengono valutati ogni volta che li accediamo e vengono valutati ogni volta che li usiamo in quella funzione.
- Differenze di sintassi Scala
Call-by-value:
def myFunction(a: Int, b: Int) { }
Qui entrambi a e b sono parametri Call-by-value per la mia funzione. Call-by-name:
def myFunction(a: Int, b: => Int) { }
Qui a è un parametro Call-by-value e b è Call-by-name per la mia funzione.
Quali sono i framework MVC più popolari per il linguaggio Scala per sviluppare applicazioni web?
I seguenti sono i framework MVC più popolari disponibili per il linguaggio Scala per sviluppare applicazioni web:
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
Quali sono le principali differenze tra la struttura di un progetto Maven basato su Java e un progetto Maven basato su Scala?
La maggior parte dei progetti basati su Java utilizza Maven come strumento di build. Tuttavia, molte persone usano SBT come strumento di build per sviluppare le loro applicazioni basate su Scala, ma alcuni team utilizzano anche Maven come strumento di build per sviluppare le loro applicazioni basate su Scala. La struttura delle cartelle di Maven per i progetti basati su Java e quelli basati su Scala è quasi la stessa, con solo un cambiamento di nome della cartella come mostrato nei diagrammi seguenti: nomi delle cartelle java e scala. Struttura della cartella del progetto Maven basato su Java: Struttura della cartella del progetto Maven basato su Scala:
Cosa significa Extractor in Scala? Qual è la differenza tra Costruttore ed Extractor in Scala? Qual è l’uso di Extractor in Scala?
Non solo in Java e Scala, ma in quasi tutti i linguaggi di programmazione orientati agli oggetti, il Costruttore è utilizzato per creare (o assemblare) un oggetto o un’istanza di una Classe utilizzando i suoi parametri (o componenti). L’Estrattore è piuttosto opposto al Costruttore. In Scala, l’Estrattore è utilizzato per decomporre o smontare un oggetto nei suoi parametri (o componenti). In Scala, il metodo apply è un Costruttore. Internamente, l’Estrattore utilizza il metodo unapply per decomporre un oggetto nei suoi parti (o parametri). In Scala, l’Estrattore è principalmente utilizzato nel concetto di Pattern Matching. Discuteremo presto il concetto di Pattern Matching.
Qual è l’uso di ‘???’ nelle applicazioni basate su Scala?
Questi tre punti interrogativi ‘???’ non sono un operatore, ma un metodo in Scala. Viene utilizzato per contrassegnare un metodo che è ‘In Progress’, il che significa che lo sviluppatore dovrebbe fornire l’implementazione per quello. Questo metodo è definito nella classe scala.PreDef come mostrato di seguito:
def ??? : Nothing = throw new NotImplementedError
Se eseguiamo quel metodo senza fornire un’implementazione, genera un errore ‘NotImplementedError’ come mostrato di seguito:
scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int
scala> add(10,20)
scala.NotImplementedError: an implementation is missing
Spiega la differenza principale tra List e Stream nell’API di collezione di Scala? Come possiamo dimostrare questa differenza? Quando scegliamo Stream?
In Scala, sia List che Stream provengono dall’API di collezione e funzionano in modo quasi simile. Entrambi sono collezioni immutabili. Tuttavia, c’è una differenza principale tra List e Stream nell’API di collezione di Scala: gli elementi di List vengono valutati in modo diligente e gli elementi di Stream vengono valutati in modo pigro, il che significa quando li accediamo.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
Qui possiamo osservare che tutti gli elementi di List vengono valutati al momento della creazione dell’oggetto List. Tuttavia, se facciamo la stessa cosa su Stream, non possiamo vedere tutti gli elementi. Possiamo vedere solo il primo elemento valutato e gli elementi rimanenti vengono valutati in modo pigro come mostrato di seguito:
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
Quando vogliamo che una collezione Lazy valuti gli elementi solo quando li accediamo, è meglio usare Stream.
Qual è la differenza tra :: e #:: in Scala? Qual è la differenza tra ::: e #::: in Scala?
Nella API delle collezioni Scala,
- :: e ::: sono metodi disponibili nella classe List.
- #:: e #::: sono metodi disponibili nella classe Stream
- Nella classe List, il metodo :: viene utilizzato per aggiungere un elemento all’inizio della lista.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
scala> list1 = 0 :: list1
list1: List[Int] = List(0, 1, 2, 3, 4)
- Nella classe List, il metodo ::: viene utilizzato per concatenare gli elementi di una lista data davanti a questa lista.
scala> var list1 = List(3,4,5)
list1: List[Int] = List(3, 4, 5)
scala> val list2 = List(1,2) ::: list1
list2: List[Int] = List(1, 2, 0, 1, 2, 3, 4)
- Nella classe Stream, il metodo #:: viene utilizzato per aggiungere un dato elemento all’inizio dello stream. Solo questo elemento appena aggiunto viene valutato e seguito da elementi dello stream valutati in modo pigro.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> s1 = 0 #:: s1
s1: scala.collection.immutable.Stream[Int] = Stream(0, ?)
- Nella classe Stream, il metodo #::: viene utilizzato per concatenare uno stream dato all’inizio dello stream. Solo questo elemento appena aggiunto viene valutato e seguito da elementi dello stream valutati in modo pigro.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> val s2 = Stream(-1,0) #::: s1
s2: scala.collection.immutable.Stream[Int] = Stream(-1, ?)
- Il metodo :: funziona come operatore di costruzione per la classe List e il metodo #:: funziona come operatore di costruzione per la classe Stream. Qui ‘cons’ sta per costruire.
- ::: Il metodo funziona come un operatore di concatenazione per la classe List e #::: Il metodo funziona come un operatore di concatenazione per la classe Stream.
Se voglio diventare un Fullstack Scala Developer, quale stack tecnologico dovrei imparare?
Se vuoi diventare un Fullstack Scala Developer, dovresti imparare il seguente stack tecnologico:
- Scala 2.11.7
- Play 2.4.6 Framework
- Akka 2.3 Framework
- Uno strumento di build: SBT/Maven
- Un framework JS: CoffeeScript/JavaScript
- Un IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
- Un framework TDD & BDD: ScalaTest,Spec2,ScalaCheck,Mockito
- Microservizi con Play e Scala
- SCoverage
- Scalastyle
- Pattern di progettazione della programmazione funzionale
- Machine Learning con Scala
{
“error”: “Upstream error…”
}
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions