Domande e risposte sull’intervista a Scala

Benvenuti alle domande e risposte per i colloqui di Scala. Oggi, la maggior parte delle aziende nel settore finanziario/bancario, governativo, delle telecomunicazioni, dei social network, ecc. utilizzano Scala, Play e il framework Akka per sviluppare i loro progetti, perché questi framework supportano sia le caratteristiche OOPs che quelle FP e offrono numerosi vantaggi.

Domande per il colloquio di Scala

Condividerò le mie conoscenze acquisite durante i colloqui e la mia esperienza di sviluppo con l’ecosistema Scala o lo sviluppo Fullstack Scala (Scala/Play/Akka) attraverso alcuni post. Scriverò tre post separati. Alcune domande sono composte da una sola domanda, mentre altre contengono delle domande secondarie. In totale, discuterò circa 200 domande. Scommetto che se conoscerete tutte queste domande, supererete sicuramente tutti i colloqui per lo sviluppatore Scala. Tuttavia, se desiderate continuare come sviluppatore Fullstack Scala, dovreste imparare in modo approfondito tutte queste tecnologie Fullstack Scala.

Introduzione

I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:

  1. Domande e Risposte per Colloqui su Scala:
    Discuteremo qui alcune domande di base per i colloqui su Scala, utili sia per i neolaureati che per gli sviluppatori Java che vogliono passare allo sviluppo in Scala o che hanno almeno un anno di esperienza come sviluppatori Scala.Domande e Risposte Intermedie per Colloqui su Scala:-
    Discuteremo alcune domande per colloqui, utili per chi ha almeno 2 anni di esperienza come sviluppatore Scala/Java.Domande e Risposte Avanzate per Colloqui su Scala:-
    Discuteremo alcune domande per colloqui, utili per sviluppatori Scala/Java senior o con esperienza.Domande e Risposte per Colloqui su Concorrenza e Parallelismo in Scala/Java:-
    Discuteremo domande e risposte per colloqui su Concorrenza e Parallelismo in Scala/Java, utili per sviluppatori Scala/Java senior o con esperienza.

Discuteremo anche alcune differenze tra costrutti Scala e Java in modo che gli utenti (che passano da Java a Scala) possano trarre vantaggio da questi post. In questo post, discuteremo alcune domande di base per i colloqui su Scala. Leggi i miei prossimi post per le altre due sezioni.

Domande di Base per Colloqui su Scala

In questa sezione, elencheremo tutte le domande di base sull’intervista di Scala e nella sezione successiva le discuteremo in dettaglio.

  1. Cosa è Scala? È un linguaggio o una piattaforma? Supporta OOP o FP? Chi è il padre di Scala?
  2. Scala è un linguaggio di tipo statico? Cosa si intende per linguaggio di tipo statico e cosa si intende per linguaggio di tipo dinamico? Qual è la differenza tra linguaggi di tipo statico e linguaggi di tipo dinamico?
  3. Scala è un linguaggio puramente OOP? Java è un linguaggio puramente OOP?
  4. Scala supporta tutti i concetti di programmazione funzionale? Java 8 supporta tutti i concetti di programmazione funzionale?
  5. Quali sono i principali vantaggi del linguaggio Scala? Ci sono svantaggi nel linguaggio Scala?
  6. Qual è il principale svantaggio del linguaggio Scala?
  7. Qual è il motto principale del linguaggio Scala?
  8. Quali sono i linguaggi JVM popolari attualmente disponibili?
  9. Come la classe java.lang.Object di Java, qual è la superclasse di tutte le classi in Scala?
  10. Qual è il modificatore di accesso predefinito in Scala? Scala ha la parola chiave “public”?
  11. Cosa si intende per “Type Inference” in Scala?
  12. Differenza tra Int di Scala e java.lang.Integer di Java? Qual è la relazione tra Int e RichInt in Scala?
  13. Cosa significa Nothing in Scala? Cosa significa Nil in Scala? Qual è la relazione tra Nothing e Nil in Scala?
  14. Cosa significa Null in Scala? Cosa significa null in Scala? Qual è la differenza tra Null e null in Scala?
  15. Cosa significa Unit in Scala? Qual è la differenza tra il void di Java e l’Unit di Scala?
  16. Qual è la differenza tra val e var in Scala?
  17. Cosa significa REPL in Scala? Qual è l’uso del REPL di Scala? Come accedere al REPL di Scala dal Prompt dei comandi?
  18. Quali sono le caratteristiche di Scala?
  19. Come implementiamo i cicli in modo funzionale? Qual è la differenza tra i cicli di stile OOP e FP?
  20. Cos’è un “Application” in Scala o cos’è un’applicazione Scala? Cos’è un “App” in Scala? Qual è l’uso di App di Scala?
  21. Scala supporta il sovraccarico degli operatori? Java supporta il sovraccarico degli operatori?
  22. Cos’è un’espressione? Cos’è un’istruzione? Differenza tra espressione e istruzione?
  23. Qual è la differenza tra “If…Else” di Java e “If…Else” di Scala?
  24. Scala è un linguaggio basato su espressioni o basato su istruzioni? Java è un linguaggio basato su espressioni o basato su istruzioni?
  25. Dì alcune funzionalità supportate da Java, ma non da Scala e viceversa?
  26. Qual è la differenza tra Funzione e Metodo in Scala?
  27. Quanti file di classe pubblici è possibile definire in un file di origine Scala?
  28. Come Java, quali sono gli import predefiniti nel linguaggio Scala?
  29. Quanti operatori ci sono in Scala e perché?
  30. Menzione di alcune parole chiave usate da Java e non necessarie in Scala? Perché Scala non le richiede?
  31. Cos’è PreDef in Scala?

Fai riferimento al mio post precedente per saperne di più su Programmazione Funzionale (Clicca su questo link per aprire il mio post precedente).

Domande e risposte per colloqui su Scala

In questa sezione, affronteremo ogni singola domanda dalla lista sopra e ne discuteremo in dettaglio con esempi appropriati (se necessario). Se vuoi comprendere questi concetti in modo approfondito con esempi, consulta i miei post precedenti nella sezione Tutorial su Scala.

Cos’è Scala? È un linguaggio o una piattaforma? Supporta la POO o la PF? Chi è il padre di Scala?

Scala sta per SCAlable LAnguage. Martin Odersky è il padre di Scala. Scala è un linguaggio di programmazione multi-paradigma, che supporta concetti di programmazione orientata agli oggetti e funzionale. È progettato e sviluppato da Martin Odersky. Scala è un linguaggio di programmazione sicuro dal punto di vista dei tipi, sia oggettuali che funzionali, che viene eseguito sulla JVM (Java Virtual Machine). Scala è un linguaggio ibrido funzionale (orientato agli oggetti e funzionale) per la JVM. Scala ha un sistema di tipi forte e statico. In Scala, tutti i tipi vengono controllati durante la compilazione.

Scala è un linguaggio staticamente tipizzato? Cosa significa essere un linguaggio staticamente tipizzato e cosa significa essere un linguaggio dinamicamente tipizzato? Qual è la differenza tra i linguaggi staticamente tipizzati e i linguaggi dinamicamente tipizzati?

Sì, Scala è un linguaggio a tipizzazione statica. Linguaggio a tipizzazione statica significa che il controllo del tipo viene eseguito in fase di compilazione dal compilatore, non in fase di esecuzione. Il principale vantaggio di questi tipi di linguaggi è: come sviluppatori, dovremmo preoccuparci di scrivere codice corretto per evitare tutti gli errori di compilazione. Poiché il compilatore controlla molti degli errori in fase di compilazione, non otteniamo molti problemi o bug in fase di esecuzione. Esempi: – Java, Scala, C, C++, Haskell ecc. Il linguaggio a tipizzazione dinamica significa che il controllo del tipo viene eseguito in fase di esecuzione, non in fase di compilazione dal compilatore. Poiché un compilatore non controllerà alcun controllo del tipo in fase di compilazione, possiamo aspettarci più problemi o bug in fase di esecuzione. Esempio: – Groovy, JavaScript, Ruby, Python, Smalltalk ecc.

Scala è un linguaggio OOP puro? Java è un linguaggio OOP puro?

Il linguaggio di programmazione orientato agli oggetti puro significa che tutto dovrebbe essere un oggetto. Java non è un linguaggio di programmazione orientato agli oggetti puro perché supporta i seguenti due concetti non orientati agli oggetti:

  • Java supporta tipi di dati primitivi. Non sono oggetti.
  • Java supporta membri statici. Non sono correlati agli oggetti.

Sì, Scala è un linguaggio di programmazione orientato agli oggetti puro perché in Scala, tutto è un oggetto e tutto è un valore. Le funzioni sono valori e i valori sono oggetti. Scala non ha tipi di dati primitivi e non ha membri statici.

Scala supporta tutti i concetti della Programmazione Funzionale? Java 8 supporta tutti i concetti della Programmazione Funzionale?

Sì, Scala supporta tutti i concetti della Programmazione Funzionale (FP). Java 8 ha introdotto alcuni costrutti della Programmazione Funzionale, ma NON supporta tutti i concetti della Programmazione Funzionale. Ad esempio, Java 8 non supporta il Pattern Matching, il Currying delle Funzioni, gli Implicits, ecc.

Quali sono i principali vantaggi del Linguaggio Scala? Ci sono svantaggi del Linguaggio Scala?

Se utilizziamo il Linguaggio Scala per sviluppare le nostre applicazioni, possiamo ottenere i seguenti vantaggi o svantaggi: Vantaggi del Linguaggio Scala:-

  • Codice Semplice e Conciso
  • Codice Molto Espressivo
  • Codice più Leggibile
  • Linguaggio 100% Sicuro dal punto di vista del Tipo
  • Immutabilità e Assenza di Effetti Collaterali
  • Codice più Riutilizzabile
  • Maggiore Modularità
  • Fare Di Più Con Meno Codice
  • Sintassi Molto Flessibile
  • Supporta Tutte le Caratteristiche OOP
  • Supporta Tutte le Caratteristiche FP. Altamente Funzionale.
  • Codice Meno Prone agli Errori
  • Programmazione in Concorrenza e Parallela Migliore
  • Codice Altamente Scalabile e Manutenibile
  • Alta Produttività
  • Applicazioni Distribuite
  • Completa Interoperabilità con Java
  • Potenti DSL Scala Disponibili

Svantaggi del Linguaggio Scala:-

  • Codice Meno Leggibile
  • Più Complesso da Capire per i Principianti
  • Sintassi Complessa da Imparare
  • Meno Compatibilità All’indietro

NOTA:- Possiamo scrivere il codice Scala in modo più leggibile o meno leggibile.

Qual è il principale svantaggio del linguaggio Scala?

Oltre ai numerosi vantaggi di Scala, esiste un importante svantaggio: il problema della compatibilità retroattiva. Se vogliamo aggiornare all’ultima versione di Scala, dobbiamo occuparci di cambiare alcuni nomi di pacchetti, nomi di classi, nomi di metodi o funzioni, ecc. Ad esempio, se stai utilizzando una vecchia versione di Scala e il tuo progetto utilizza l’annotazione BeanProperty. Era disponibile in “scala.reflect” come “scala.reflect.BeanProperty” nelle vecchie versioni. Se vogliamo aggiornare alle nuove versioni di Scala, dobbiamo cambiare questo pacchetto da “scala.reflect” a “scala.beans”.

Qual è il motto principale del linguaggio Scala?

Come il motto di Java “Scrivi una volta, esegui ovunque”, Scala ha il motto “Fai di più con meno” o “Fai di più con meno codice”. “Fai di più con meno” significa che possiamo sviluppare programmi o logiche più complesse con meno codice.

Java, Scala, Groovy e Closure sono i linguaggi JVM (Java Virtual Machine) più popolari. I linguaggi JVM Scala, Groovy e Closure supportano sia le caratteristiche della programmazione orientata agli oggetti che quelle della programmazione funzionale. Java SE 8 supporta tutte le caratteristiche della programmazione orientata agli oggetti. Tuttavia, supporta poche caratteristiche della programmazione funzionale come le espressioni Lambda, le funzioni, l’inferenza di tipo, le funzioni di ordine superiore.

Come la classe java.lang.Object di Java, qual è la superclasse di tutte le classi in Scala?

Come sappiamo in Java, la superclasse di tutte le classi (classi API di Java o classi definite dall’utente) è java.lang.Object. Allo stesso modo, in Scala, la superclasse di tutte le classi o tratti è la classe “Any”. La classe Any è definita nel pacchetto scala come “scala.Any”.

Qual è il modificatore di accesso predefinito in Scala? Scala ha la parola chiave “public”?

In Scala, se non specificaremo alcun modificatore di accesso per un metodo, una funzione, un trait, un oggetto o una classe, il modificatore di accesso predefinito sarà “public”. Anche per i campi, “public” è il modificatore di accesso predefinito. A causa di questa caratteristica predefinita, Scala non ha la parola chiave “public”.

Cosa significa “Type Inference” in Scala?

I tipi possono essere dedotti dal compilatore di Scala durante la compilazione. Questo è noto come “Type Inference”. I tipi si riferiscono ai tipi di dati o ai tipi di risultato. Utilizziamo i tipi in molti punti dei programmi Scala, come i tipi di variabili, i tipi di oggetti, i tipi di parametri dei metodi/funzioni, i tipi di ritorno dei metodi/funzioni, ecc. In parole semplici, determinare il tipo di una variabile, espressione o oggetto durante la compilazione è noto come “Type Inference”.

Quali sono le somiglianze e le differenze tra Int in Scala e java.lang.Integer in Java? Qual è la relazione tra Int e RichInt in Scala?

Somiglianze tra Int in Scala e java.lang.Integer in Java:

  • Entrambi sono classi.
  • Entrambi sono utilizzati per rappresentare numeri interi.
  • Entrambi sono interi con segno a 32 bit.

Differenze tra la classe Int di Scala e java.lang.Integer di Java:

  • La classe Int di Scala non implementa l’interfaccia Comparable.
  • La classe java.lang.Integer di Java implementa l’interfaccia Comparable.

Integer di Java è simile a Int di Scala e RichInt. RichInt è una classe finale definita nel pacchetto scala.runtime come “scala.runtime.RichInt”. In Scala, la relazione tra Int e RichInt è che quando usiamo Int in un programma Scala, viene automaticamente convertito in RichInt per utilizzare tutti i metodi disponibili in quella classe. Possiamo dire che RichInt è una classe implicita di Int. (Discuteremo “Cos’è Implicit e i vantaggi degli Implicit nella mia prossima pubblicazione).

Cos’è Nothing in Scala? Cos’è Nil in Scala? Qual è la relazione tra Nothing e Nil in Scala?

In Scala, Nothing è un tipo (classe finale). È definito alla base del sistema di tipi di Scala, il che significa che è un sottotipo di qualsiasi cosa in Scala. Non ci sono istanze di Nothing. Casi d’uso di Nothing in Scala:- Se Nothing non ha istanze, quando lo usiamo nelle applicazioni Scala?

  • Nil è definito usando Nothing (vedi sotto per esempio).
  • None è definito usando Nothing.
object None extends Option[Nothing]
  • Possiamo usare Nothing come tipo di ritorno dei metodi che non restituiscono mai.
  • Possiamo usare Nothing come tipo di ritorno dei metodi che terminano in modo anomalo.

Nil è un oggetto che viene utilizzato per rappresentare una lista vuota. È definito nel pacchetto “scala.collection.immutable” come mostrato di seguito:

object Nil extends List[Nothing]

Esempio:-

scala> Nil
res5: scala.collection.immutable.Nil.type = List()

scala> Nil.length
res6: Int = 0

Cosa è Null in Scala? Cosa è null in Scala? Qual è la differenza tra Null e null in Scala?

Null è un tipo (classe finale) in Scala. Il tipo Null è disponibile nel pacchetto “scala” come “scala.Null”. Ha una e una sola istanza che è null. In Scala, “null” è un’istanza del tipo scala.Null. Esempio:-

scala> val myNullRef : Null = null
myNullRef: Null = null

Non possiamo assegnare altri valori ai riferimenti di tipo Null. Accetta solo il valore ‘null’. Null è un sottotipo di tutti i tipi di riferimento. Null è alla base del sistema di tipi di Scala. Poiché non è un sottotipo dei tipi di valore, possiamo assegnare “null” a qualsiasi variabile di tipo valore. Esempio:-

scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
       val myInt : Int = null

^ Qui errore di tipo non corrispondente. trovato: Null(null) ma richiesto: Int. Le conversioni implicite tra Null e Int non sono applicabili perché sono ambigue.

Cosa è Unit in Scala? Qual è la differenza tra void in Java e Unit in Scala?

In Scala, Unit è utilizzato per rappresentare “Nessun valore” o “Nessun valore utile”. Unit è una classe finale definita nel pacchetto “scala” che è “scala.Unit”. Unit è qualcosa di simile al void di Java. Ma hanno alcune differenze.

  • Il void di Java non ha alcun valore. È nulla.
  • Unit di Scala ha un valore ()
  • () è l’unico valore di tipo Unit in Scala. Tuttavia, non ci sono valori di tipo void in Java.
  • Il void di Java è una parola chiave. Unit di Scala è una classe finale.

Entrambi sono utilizzati per rappresentare che un metodo o una funzione non restituisce nulla.

Qual è la differenza tra val e var in Scala?

In Scala, sia val che var vengono utilizzati per definire variabili. Tuttavia, hanno alcune differenze significative.

  • var sta per variabile.
  • val sta per valore.
  • Come sappiamo, variabile significa modificabile e valore significa costante.
  • var viene utilizzato per definire variabili variabili, il che significa che possiamo riassegnare i valori una volta creati.
  • val viene utilizzato per definire variabili immutabili, il che significa che non possiamo riassegnare i valori una volta creati.
  • In semplice terminologia Java, var significa ‘variabile’ e val significa ‘variabile finale’.

Cosa significa REPL in Scala? Qual è l’uso del REPL di Scala? Come accedere al REPL di Scala da CMD Prompt?

REPL sta per Read-Evaluate-Print Loop. Possiamo pronunciarlo come ‘ripple’. In Scala, REPL funge da interprete per eseguire il codice Scala dal prompt dei comandi. Ecco perché REPL è anche noto come CLI di Scala (Command Line Interface) o shell della riga di comando Scala. Lo scopo principale del REPL è quello di sviluppare e testare piccoli frammenti di codice Scala per scopi pratici. È molto utile per i principianti di Scala per praticare programmi di base. Possiamo accedere al REPL utilizzando il comando “scala”. Quando digitiamo il comando “scala” al prompt dei comandi, otterremo una shell REPL dove possiamo digitare ed eseguire il codice scala.

D:\> scala

scala>

Quali sono le caratteristiche di Scala?

Il linguaggio Scala supporta le seguenti caratteristiche:

  • Supporta sia la programmazione OOP-style (stile imperativo) che la programmazione in stile funzionale
  • Linguaggio di programmazione puramente orientato agli oggetti
  • Supporta tutte le caratteristiche funzionali
  • Interprete REPL (Read-Evaluate-Print Loop)
  • Sistema di tipo forte
  • Linguaggio staticamente tipizzato
  • Inferenza del tipo
  • Supporta il Pattern Matching
  • Supporta le Closures
  • Supporta le strutture di dati persistenti
  • Utilizza il Modello Attore per sviluppare applicazioni di concorrenza
  • Interoperabile con Java
  • Disponibili tutti gli strumenti di sviluppo – IDE, strumenti di costruzione, framework web, framework TDD e BDD

Come implementiamo i loop in maniera funzionale? Qual è la differenza tra i loop in stile OOP e FP?

Sappiamo come implementare i loop in stile orientato agli oggetti: utilizzando variabili temporanee mutevoli, aggiorniamo il valore della variabile e utilizziamo costrutti di loop. È un approccio molto noioso e insicuro. Non è thread-safe. Lo stile orientato agli oggetti utilizza i seguenti costrutti per implementare i loop:

  • Costrutti di loop
  • Mutabilità
  • Effetti collaterali

Possiamo implementare gli stessi cicli in modo diverso in modo funzionale. È Thread-Safe. Possiamo utilizzare le seguenti due tecniche per implementare i cicli in stile funzionale:

  • Ricorsione
  • Tail-Recursion
  • Immutabilità
  • Nessun Effetto Collaterale

Cosa si intende per “Applicazione” in Scala o cosa è Scala Application? Cosa si intende per “App” in Scala? Qual è l’uso di App di Scala?

Applicazione Scala: In Scala, App è un trait definito nel package scala come “scala.App”. Definisce il metodo principale. Se un oggetto o una classe estende questo trait, diventeranno automaticamente programmi eseguibili Scala perché erediteranno il metodo principale da Application. Il principale vantaggio nell’utilizzare App è che non è necessario scrivere il metodo principale. Il principale svantaggio nell’utilizzare App è che dovremmo usare lo stesso nome “args” per fare riferimento agli argomenti della riga di comando perché il metodo main() di scala.App utilizza questo nome. Esempio:- Senza Scala App:

object MyApp {
    def main( args: Array[String]){
        println("Hello World!")
    }
}

Con Scala App:

object MyApp extends App{
   println("Hello World!")
}

Se osserviamo i due esempi sopra, nel secondo esempio non abbiamo definito il metodo principale perché abbiamo ereditato da Scala App (Application). Prima di Scala 2.9, abbiamo il trait scala.Application. Ma è deprecato da scala.App dalla versione Scala 2.9.

Scala supporta il sovraccarico degli operatori? Java supporta il sovraccarico degli operatori?

Java non supporta il sovraccarico degli operatori. Scala supporta il sovraccarico degli operatori. Il motivo è che Java non desidera supportare alcuni nomi di metodi fuorvianti come “+*/”. Scala ha dato questa flessibilità allo sviluppatore per decidere quale nome utilizzare per i metodi/funzioni. Quando chiamiamo 2 + 3, significa che ‘+’ non è un operatore, ma un metodo disponibile nella classe Int (o nel suo tipo implicito). Internamente, questa chiamata viene convertita in “2.+(3)“.

Cosa è un’espressione? Cosa è una dichiarazione? Qual è la differenza tra un’espressione e una dichiarazione?

Espressione: L’espressione è un valore che significa che verrà valutata come un valore. Poiché un’espressione restituisce un valore, possiamo assegnarla a una variabile. Esempio: la condizione If di Scala, l’operatore ternario di Java. Dichiarazione: Una dichiarazione definisce una o più azioni o operazioni. Ciò significa che la dichiarazione esegue azioni. Poiché non restituisce un valore, non possiamo assegnarla a una variabile. Esempio: la condizione If di Java.

Qual è la differenza tra il “If…Else” di Java e il “If…Else” di Scala?

“If…Else” di Java: In Java, “If…Else” è una dichiarazione, non un’espressione. Non restituisce un valore e non possiamo assegnarlo a una variabile. Esempio:

 int year;
 if( count == 0) 
   year = 2014;
 else 
   year = 2015;

“If…Else” di Scala: In Scala, “If…Else” è un’espressione. Valuta un valore, restituendolo. Possiamo assegnarlo a una variabile.

 val year = if( count == 0) 2014 else 2015

**NOTA:-** Il “If…Else” di Scala funziona come l’operatore ternario di Java. Possiamo utilizzare il “If…Else” di Scala come la dichiarazione “If…Else” di Java come mostrato di seguito:

 val year = 0
 if( count == 0) 
   year = 2014 
 else 
   year = 2015

Scala è un linguaggio basato su espressioni o basato su istruzioni? Java è un linguaggio basato su espressioni o basato su istruzioni?

In Scala, tutto è un valore. Tutte le espressioni o istruzioni si valutano in un valore. Possiamo assegnare espressioni, funzioni, chiusure, oggetti, ecc. a una variabile. Quindi Scala è un linguaggio orientato alle espressioni. In Java, le istruzioni non sono espressioni o valori. Non possiamo assegnarle a una variabile. Quindi Java non è un linguaggio orientato alle espressioni. È un linguaggio basato su istruzioni.

Dimmi alcune caratteristiche supportate da Java, ma non da Scala e viceversa?

  • Java non supporta il sovraccarico degli operatori, ma Scala lo supporta.
  • Java supporta gli operatori ++ e , ma Scala non li supporta.
  • Java ha eccezioni controllate e non controllate, ma Scala non ha eccezioni controllate.
  • Scala non supporta le dichiarazioni break e continue, ma Java le utilizza.
  • Scala non ha un casting di tipo esplicito, mentre Java supporta questa funzionalità.
  • Scala supporta il Pattern Matching, a differenza di Java.
  • Java utilizza tipi di dati primitivi, ma Scala non li ha.
  • Java supporta i membri statici, ma Scala non ha un concetto di membri statici.
  • Scala supporta Implicits e Traits, che Java non supporta.

**NOTA:** Questa lista va oltre una pagina, ma sono alcuni punti importanti da ricordare sulle differenze tra le caratteristiche di Scala e Java per affrontare i colloqui su Scala.

Qual è la differenza tra Funzione e Metodo in Scala?

Scala supporta sia le funzioni che i metodi. Utilizziamo la stessa sintassi per definire funzioni e metodi, non c’è differenza nella sintassi. Tuttavia, hanno una piccola differenza:

  • Possiamo definire un metodo in una classe o un trait Scala. Il metodo è associato a un oggetto (un’istanza di una classe). Possiamo chiamare un metodo utilizzando un’istanza di una classe. Non possiamo utilizzare direttamente un Metodo Scala senza utilizzare un oggetto.
  • La Funzione non è associata a una classe o a un trait. È definita in un Package Scala. Possiamo accedere alle funzioni senza utilizzare oggetti, simile ai Metodi Statici di Java.

NOTA:- Discuteremo di Classi, Trait, Package, Oggetto, ecc. nei miei prossimi articoli.

Quanti file di classe pubblici è possibile definire in un file di origine Scala?

In Java, possiamo definire al massimo una classe/interfaccia pubblica in un file di origine. A differenza di Java, Scala supporta la definizione di molteplici classi pubbliche nello stesso file di origine. Possiamo definire qualsiasi numero di classi/interfacce/traits pubblici in un file di origine Scala.

Come in Java, quali sono gli import predefiniti nel linguaggio Scala?

Sappiamo che java.lang è il package predefinito importato automaticamente in tutti i programmi Java dalla JVM. Non è necessario importare questo package esplicitamente. Allo stesso modo, ecco gli import predefiniti disponibili in tutti i programmi Scala:

  • package java.lang
  • package scala
  • package scala.PreDef

Quanti operatori ci sono in Scala e perché?

A differenza di Java e come C++, Scala supporta il sovraccarico degli operatori. Scala ha un solo operatore che è l’operatore “=”. Al di fuori di questo, sono tutti metodi. Ad esempio, in 2 + 3, qui il “+” non è un operatore in Scala. Il “+” è un metodo disponibile nella classe Int. Il compilatore Scala osserva che 2 e 3 sono interi e cerca il metodo “+” nella classe Int. Quindi il compilatore Scala converte l’espressione “2 + 3” in “2.+(3)” e chiama il metodo “+” sull’oggetto intero “2” e passa l’oggetto intero “3” come parametro al metodo “+”. Entrambi “2 + 3” e “2.+(3)” sono equivalenti. È solo uno zucchero sintattico di Scala per scrivere programmi in stile funzionale.

Menziona alcune parole chiave usate da Java e non necessarie in Scala? Perché Scala non le richiede?

Java utilizza ampiamente le seguenti parole chiave:

  • Parola chiave ‘public’ – per definire classi, interfacce, variabili ecc.
  • Parola chiave ‘static’ – per definire membri statici.

Scala non richiede queste due parole chiave. Scala non ha le parole chiave ‘public’ e ‘static’.

  • In Scala, il modificatore di accesso predefinito è ‘public’ per classi, trait, metodi/funzioni, campi, ecc. Ecco perché la parola chiave ‘public’ non è necessaria.
  • Per supportare i principi di OOP, il team di Scala ha evitato la parola chiave ‘static’. Ecco perché Scala è un linguaggio di programmazione puramente OOP. È molto difficile gestire i membri statici nelle applicazioni di concorrenza.

Cos’è PreDef in Scala? Qual è lo scopo principale di PreDef in Scala? In Scala, PreDef è un oggetto definito nel pacchetto scala come “scala.PreDef”. È un oggetto di utilità. Definisce molti metodi di utilità come mostrato di seguito:

  • Metodi di IO della console (print, println, ecc.)
  • Metodi di utilità per le collezioni
  • Metodi di utilità per le stringhe
  • Metodi di conversione implicita
  • Metodi di utilità di affermazione, ecc.

Per esempio, i metodi print, println, readLine, readInt, require, ecc. sono definiti nell’oggetto PreDef. In Scala, PreDef è disponibile per utilizzare i suoi metodi senza importarlo in tutti i programmi Scala perché il compilatore di Scala importa automaticamente questo oggetto in tutte le unità di compilazione come Classi, Oggetti, Trait, ecc. E questo è tutto riguardo alle “Domande e Risposte di Base su Scala”. Discuteremo alcune Domande e Risposte su Scala Intermedie, Avanzate e in Tempo Reale nei miei prossimi post. Lasciami un commento se ti è piaciuto il mio post o se hai problemi/suggerimenti.

Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers