Bienvenue aux questions et réponses d’entretien Scala. De nos jours, la plupart des entreprises de la finance/banque, du gouvernement, des télécommunications, des réseaux sociaux, etc. utilisent Scala, Play et le framework Akka pour développer leurs projets, car ces frameworks prennent en charge à la fois les fonctionnalités orientées objet et fonctionnelles et offrent de nombreux avantages.
Questions d’entretien Scala
Je vais partager mes connaissances sur les entretiens et mon expérience de développement Scala Ecosystem ou Fullstack Scala (Scala/Play/Akka) avec vous à travers quelques articles. Je vais vous présenter 3 articles séparés. Certaines questions ne sont qu’une seule question et d’autres ont des sous-questions. Au total, je vais discuter d’environ 200 questions. Je vous garantis que si vous êtes familiarisé avec toutes ces questions, vous réussirez certainement tous les entretiens pour un poste de développeur Scala. Cependant, si vous souhaitez continuer en tant que développeur Fullstack Scala, vous devriez apprendre en profondeur toutes ces technologies Fullstack Scala.
Introduction
I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:
- Questions et réponses d’entretien Scala :
Nous discuterons ici de certaines questions d’entretien de base en Scala, utiles aux débutants ou aux développeurs Java souhaitant passer au développement Scala ou ayant une expérience d’au moins 1 an en tant que développeur Scala.2. Questions et réponses d’entretien Scala intermédiaires :-
Nous discuterons de certaines questions d’entretien, utiles aux personnes ayant une expérience d’au moins 2 ans en tant que développeur Scala/Java.3. Questions et réponses d’entretien Scala avancées :-
Nous discuterons de questions d’entretien, utiles aux développeurs Scala/Java seniors ou expérimentés.4. Questions et réponses d’entretien sur la concurrence et la parallélisme Scala/Java :-
Nous discuterons des questions et réponses d’entretien sur la concurrence et la parallélisme Scala/Java, utiles aux développeurs Scala/Java seniors ou expérimentés.
Nous discuterons également de certaines différences entre les constructions Scala et Java, afin que les utilisateurs (passant de Java à Scala) puissent tirer parti de ces publications. Dans cet article, nous allons discuter de quelques questions d’entretien de base en Scala. Lisez mes prochains articles pour les deux autres sections.
Questions d’entretien de base en Scala
Dans cette section, nous allons répertorier toutes les questions d’entretien de base sur Scala, et dans la section suivante, nous les examinerons en détail.
- Qu’est-ce que Scala? Est-ce un langage ou une plateforme? Supporte-t-il la POO ou la PF? Qui est le père de Scala?
- Scala est-il un langage à typage statique? Qu’est-ce qu’un langage à typage statique et qu’est-ce qu’un langage à typage dynamique? Quelle est la différence entre les langages à typage statique et à typage dynamique?
- Scala est-il un langage POO pur? Java est-il un langage POO pur?
- Scala prend-il en charge tous les concepts de programmation fonctionnelle? Java 8 prend-il en charge tous les concepts de programmation fonctionnelle?
- Quels sont les principaux avantages du langage Scala? Y a-t-il des inconvénients au langage Scala?
- Quel est le principal inconvénient du langage Scala?
- Quel est le principal slogan du langage Scala?
- Quels sont les langages JVM populaires disponibles actuellement?
- Tout comme la classe « java.lang.Object » de Java, quelle est la superclasse de toutes les classes en Scala?
- Quel est le modificateur d’accès par défaut en Scala? Scala a-t-il le mot-clé « public »?
- Qu’est-ce que l' »inférence de type » en Scala?
- Différence entre l’entier de Scala (« Int ») et l’entier de Java (« java.lang.Integer »)? Quelle est la relation entre « Int » et « RichInt » en Scala?
- Qu’est-ce que « Nothing » en Scala? Qu’est-ce que « Nil » en Scala? Quelle est la relation entre « Nothing » et « Nil » en Scala?
- Qu’est-ce que « Null » en Scala? Qu’est-ce que « null » en Scala? Quelle est la différence entre « Null » et « null » en Scala?
- Qu’est-ce que « Unit » en Scala? Quelle est la différence entre « void » en Java et « Unit » en Scala?
- Quelle est la différence entre val et var en Scala ?
- Qu’est-ce que REPL en Scala ? Quelle est l’utilité du REPL Scala ? Comment accéder au REPL Scala depuis l’invite CMD ?
- Quelles sont les fonctionnalités de Scala ?
- Comment implémentons-nous des boucles de manière fonctionnelle ? Quelle est la différence entre les boucles de style OOP et FP ?
- Qu’est-ce qu’une « Application » en Scala ou Qu’est-ce qu’une application Scala ? Qu’est-ce qu’une « App » en Scala ? Quelle est l’utilité de App Scala ?
- Scala prend-il en charge la surcharge d’opérateurs ? Java prend-il en charge la surcharge d’opérateurs ?
- Qu’est-ce qu’une expression ? Qu’est-ce qu’une instruction ? Quelle est la différence entre une expression et une instruction ?
- Quelle est la différence entre « If… Else » en Java et « If… Else » en Scala ?
- Scala est-il un langage basé sur les expressions ou sur les instructions ? Java est-il un langage basé sur les expressions ou sur les instructions ?
- Donnez-moi quelques fonctionnalités prises en charge par Java mais pas par Scala et vice versa ?
- Quelle est la différence entre une fonction et une méthode en Scala ?
- Combien de fichiers de classe publics peuvent être définis dans un fichier source Scala ?
- Comme pour Java, quels sont les imports par défaut dans le langage Scala ?
- Combien d’opérateurs y a-t-il en Scala et pourquoi ?
- Mentionnez quelques mots-clés utilisés par Java et non requis en Scala ? Pourquoi Scala ne les nécessite-t-il pas ?
- Qu’est-ce que PreDef en Scala ?
Veuillez vous référer à mon message précédent pour en savoir plus sur la Programmation Fonctionnelle (Cliquez sur ce lien pour ouvrir mon message précédent).
Questions et réponses d’entretien Scala
Dans cette section, nous aborderons chaque question de la liste ci-dessus en détail et discuterons avec des exemples appropriés (si nécessaire). Si vous souhaitez comprendre ces concepts en profondeur avec des exemples, veuillez consulter mes messages précédents dans la section Tutoriels Scala.
Qu’est-ce que Scala? Est-ce un langage ou une plateforme? Prend-il en charge la POO ou la PF? Qui est le père de Scala?
Scala signifie SCAlable LAnguage. Martin Odersky est le père de Scala. Scala est un langage de programmation multi-paradigme qui prend en charge à la fois les concepts de programmation orientée objet et fonctionnelle. Il a été conçu et développé par Martin Odersky. Scala est un langage de programmation orienté objet et fonctionnel à typage sûr pour la JVM (Java Virtual Machine). Scala s’exécute sur la JVM. Scala est un langage de programmation hybride fonctionnel (orienté objet et fonctionnel). Scala possède un système de types forts et statiques. En Scala, tous les types sont vérifiés lors de la compilation.
Est-ce que Scala est un langage à typage statique ? Qu’est-ce qu’un langage à typage statique et qu’est-ce qu’un langage à typage dynamique ? Quelle est la différence entre les langages à typage statique et les langages à typage dynamique ?
Oui, Scala est un langage à typage statique. Langage à typage statique signifie que la vérification des types est effectuée au moment de la compilation par le compilateur, et non au moment de l’exécution. L’avantage principal de ces types de langages est que, en tant que développeur, nous devons veiller à écrire un code correct pour éviter toutes les erreurs de compilation. Comme le compilateur vérifie de nombreuses erreurs au moment de la compilation, nous n’avons pas beaucoup de problèmes ou de bogues au moment de l’exécution. Exemples : Java, Scala, C, C++, Haskell, etc.
Un langage à typage dynamique signifie que la vérification des types est effectuée au moment de l’exécution, et non au moment de la compilation par le compilateur. Comme un compilateur ne vérifie aucun type au moment de la compilation, nous pouvons nous attendre à plus de problèmes ou de bogues au moment de l’exécution. Exemple : Groovy, JavaScript, Ruby, Python, Smalltalk, etc.
Scala est-il un langage de programmation orienté objet pur ? Java est-il un langage de programmation orienté objet pur ?
Un langage de programmation orienté objet pur signifie que tout doit être un objet. Java n’est pas un langage de programmation orienté objet pur car il prend en charge les deux concepts non orientés objet suivants :
- Java prend en charge les types de données primitifs. Ce ne sont pas des objets.
- Java prend en charge les membres statiques. Ils ne sont pas liés aux objets.
Oui, Scala est un langage de programmation orienté objet pur car, dans Scala, tout est un objet et tout est une valeur. Les fonctions sont des valeurs et les valeurs sont des objets. Scala n’a pas de types de données primitifs et n’a pas non plus de membres statiques.
Est-ce que Scala prend en charge tous les concepts de la programmation fonctionnelle? Est-ce que Java 8 prend en charge tous les concepts de la programmation fonctionnelle?
Oui, Scala prend en charge tous les concepts de la programmation fonctionnelle (FP). Java 8 a introduit certains concepts de la programmation fonctionnelle, mais il ne prend PAS en charge tous les concepts de la programmation fonctionnelle. Par exemple, Java 8 ne prend pas en charge la correspondance de motifs, le curry de fonctions, les implicites, etc.
Quels sont les principaux avantages du langage Scala? Y a-t-il des inconvénients du langage Scala?
Si nous utilisons le langage Scala pour développer nos applications, nous pouvons obtenir les avantages et les inconvénients suivants: Avantages du langage Scala :-
- Code simple et concis
- Code très expressif
- Code plus lisible
- Langage 100% sûr au niveau des types
- Immuable et sans effets secondaires
- Code plus réutilisable
- Plus de modularité
- Faites plus avec moins de code
- Syntaxe très flexible
- Prise en charge de toutes les fonctionnalités de la POO
- Prise en charge de toutes les fonctionnalités de la PF. Très fonctionnel.
- Code moins sujet aux erreurs
- Meilleure programmation parallèle et concurrente
- Code hautement scalable et maintenable
- Productivité élevée
- Applications distribuées
- Interopérabilité complète avec Java
- DSL Scala puissants disponibles
- REPL pour apprendre les bases de Scala
Inconvénients du langage Scala :-
- Code moins lisible
- Un peu difficile à comprendre pour les débutants
- Syntaxe complexe à apprendre
- Moins de compatibilité ascendante
NOTE :- Nous pouvons écrire du code Scala de manière plus lisible ou moins lisible.
Quel est le principal inconvénient du langage Scala ?
Outre de nombreux avantages de Scala, il présente un inconvénient majeur : un problème de compatibilité ascendante. Si nous souhaitons passer à la dernière version de Scala, nous devons prendre soin de modifier certains noms de packages, noms de classes, noms de méthodes ou de fonctions, etc. Par exemple, si vous utilisez une ancienne version de Scala et que votre projet utilise l’annotation BeanProperty, elle était disponible dans « scala.reflect » comme « scala.reflect.BeanProperty » dans les anciennes versions. Si nous voulons passer à de nouvelles versions de Scala, nous devons changer ce package de « scala.reflect » à « scala.beans ».
Quel est le principal objectif du langage Scala ?
Comme la devise de Java « Write Once Run Anywhere », Scala a pour devise « Faire plus avec moins » ou « Faire plus avec moins de code ». « Faire plus avec moins » signifie que nous pouvons développer des programmes ou des logiques plus complexes avec moins de code.
Quels sont les langages JVM populaires disponibles actuellement ?
Java, Scala, Groovy et Closure sont les langages JVM (Java Virtual Machine) les plus populaires. Les langages JVM Scala, Groovy et Closure prennent en charge à la fois les fonctionnalités de programmation orientée objet et les fonctionnalités de programmation fonctionnelle. Java SE 8 prend en charge toutes les fonctionnalités de programmation orientée objet. Cependant, il prend en charge très peu de fonctionnalités de programmation fonctionnelle telles que les expressions lambda, les fonctions, l’inférence de type et les fonctions d’ordre supérieur.
Comme la classe java.lang.Object de Java, quelle est la superclasse de toutes les classes en Scala ?
Comme nous le savons en Java, la superclasse de toutes les classes (classes API Java ou classes définies par l’utilisateur) est java.lang.Object. De la même manière en Scala, la superclasse de toutes les classes ou traits est la classe « Any ». La classe Any est définie dans le package scala comme « scala.Any ».
Quel est le modificateur d’accès par défaut en Scala ? Scala a-t-il le mot-clé « public » ?
En Scala, si nous ne mentionnons aucun modificateur d’accès pour une méthode, une fonction, un trait, un objet ou une classe, le modificateur d’accès par défaut est « public ». Même pour les champs, « public » est le modificateur d’accès par défaut. En raison de cette fonctionnalité par défaut, Scala n’a pas de mot-clé « public ».
Qu’est-ce que l' »inférence de type » en Scala ?
Les types peuvent être déduits par le compilateur Scala au moment de la compilation. On l’appelle « inférence de type ». Les types désignent le type de données ou le type de résultat. Nous utilisons les types à de nombreux endroits dans les programmes Scala, tels que les types de variable, les types d’objet, les types de paramètres de méthode/fonction, les types de retour de méthode/fonction, etc. En d’autres termes, déterminer le type d’une variable, d’une expression ou d’un objet, etc., au moment de la compilation par le compilateur est appelé « inférence de type ».
Quelles sont les similitudes et les différences entre Int de Scala et java.lang.Integer de Java ? Quelle est la relation entre Int et RichInt en Scala ?
Similitudes entre Int de Scala et java.lang.Integer de Java :
- Les deux sont des classes.
- Les deux sont utilisés pour représenter des nombres entiers.
- Les deux sont des entiers signés de 32 bits.
Différences entre Int de Scala et java.lang.Integer de Java :
- La classe Int de Scala n’implémente pas l’interface Comparable.
- La classe java.lang.Integer de Java implémente l’interface Comparable.
Integer de Java est quelque chose de similaire à Int de Scala et RichInt. RichInt est une classe finale définie dans le package scala.runtime comme « scala.runtime.RichInt ». En Scala, la relation entre Int et RichInt est que lorsque nous utilisons Int dans un programme Scala, il se convertit automatiquement en RichInt pour utiliser toutes les méthodes disponibles dans cette classe. On peut dire que RichInt est une classe implicite d’Int. (Nous discuterons de « Qu’est-ce qu’une classe implicite et des avantages des classes implicites dans mon prochain article).
Qu’est-ce que Nothing en Scala ? Qu’est-ce que Nil en Scala ? Quelle est la relation entre Nothing et Nil en Scala ?
En Scala, Nothing est un type (classe finale). Il est défini au bas du système de types de Scala, ce qui signifie qu’il est un sous-type de n’importe quoi en Scala. Il n’y a pas d’instances de Nothing. Cas d’utilisation de Nothing en Scala : Si Nothing n’a pas d’instances, alors quand l’utilisons-nous dans les applications Scala ?
- Nil est défini en utilisant Nothing (Voir ci-dessous pour un exemple).
- Aucun est défini en utilisant Nothing.
object None extends Option[Nothing]
- Nous pouvons utiliser Nothing comme type de retour des méthodes qui ne renvoient jamais.
- Nous pouvons utiliser Nothing comme type de retour des méthodes qui se terminent anormalement.
Nil est un objet, qui est utilisé pour représenter une liste vide. Il est défini dans le package « scala.collection.immutable » comme indiqué ci-dessous:
object Nil extends List[Nothing]
Exemple:-
scala> Nil
res5: scala.collection.immutable.Nil.type = List()
scala> Nil.length
res6: Int = 0
Qu’est-ce que Null en Scala? Qu’est-ce que null en Scala? Quelle est la différence entre Null et null en Scala?
Null est un Type (classe finale) en Scala. Le type Null est disponible dans le package « scala » en tant que « scala.Null ». Il a une et une seule instance qui est null. En Scala, « null » est une instance du type scala.Null. Exemple:-
scala> val myNullRef : Null = null
myNullRef: Null = null
Nous ne pouvons pas attribuer d’autres valeurs aux références de type Null. Il n’accepte que la valeur ‘null’. Null est un sous-type de tous les types de référence. Null est en bas du système de types Scala. Comme il n’est PAS un sous-type des types de valeur, nous pouvons attribuer « null » à n’importe quelle variable de type de valeur. Exemple:-
scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
val myInt : Int = null
^ Erreur de type mismatch. trouvé : Null(null) mais requis : Int. Les conversions implicites entre Null et Int ne sont pas applicables car elles sont ambiguës.
Qu’est-ce qu’une Unité en Scala? Quelle est la différence entre le void de Java et l’Unité de Scala?
En Scala, Unité est utilisée pour représenter « Aucune valeur » ou « Aucune valeur utile ». Unité est une classe finale définie dans le package « scala » qui est « scala.Unit ». Unité est quelque chose de similaire au void de Java, mais ils ont quelques différences.
- Le void de Java n’a aucune valeur. C’est rien.
- L’Unité de Scala a une valeur ()
- () est la seule et unique valeur de type Unité en Scala. Cependant, il n’y a pas de valeurs de type void en Java.
- Le void de Java est un mot-clé. L’Unité de Scala est une classe finale.
Les deux sont utilisés pour indiquer qu’une méthode ou une fonction ne renvoie rien.
Quelle est la différence entre val et var en Scala?
En Scala, val et var sont tous deux utilisés pour définir des variables. Cependant, ils présentent des différences significatives.
- var signifie variable.
- val signifie valeur.
- Comme nous le savons, une variable est changeante et une valeur est constante.
- var est utilisé pour définir des variables mutables, ce qui signifie que nous pouvons réassigner des valeurs une fois qu’elles sont créées.
- val est utilisé pour définir des variables immuables, ce qui signifie que nous ne pouvons pas réassigner de valeurs une fois qu’elles sont créées.
- En termes simples de Java, var signifie « variable » et val signifie « variable finale ».
Qu’est-ce que REPL en Scala? Quel est l’usage du REPL de Scala? Comment accéder au REPL Scala depuis l’invite CMD?
REPL signifie Read-Evaluate-Print Loop. Nous pouvons le prononcer comme ‘ripple’. En Scala, REPL agit comme un interpréteur pour exécuter du code Scala à partir de l’invite de commande. C’est pourquoi REPL est également connu sous le nom d’interface en ligne de commande Scala (CLI) ou de shell en ligne de commande Scala. Le but principal de REPL est de développer et de tester de petits extraits de code Scala à des fins de pratique. Il est très utile pour les débutants en Scala pour pratiquer des programmes de base. Nous pouvons accéder à REPL en utilisant la commande « scala ». Lorsque nous tapons la commande « scala » à l’invite CMD, nous obtenons un shell REPL où nous pouvons taper et exécuter du code Scala.
D:\> scala
scala>
Quelles sont les fonctionnalités de Scala?
Le langage Scala prend en charge les fonctionnalités suivantes:
- Prend en charge à la fois le style OOP (style impératif) et la programmation fonctionnelle
- Langage de programmation purement orienté objet
- Prend en charge toutes les fonctionnalités fonctionnelles
- Interpréteur REPL (Read-Evaluate-Print Loop)
- Système de type fort
- Langage à typage statique
- Inférence de type
- Prend en charge la correspondance de motifs
- Prend en charge les fermetures
- Prend en charge les structures de données persistantes
- Utilise le modèle d’acteurs pour développer des applications concurrentes
- Interopérable avec Java
- Disponible avec tous les outils de développement – IDE, outils de construction, frameworks Web, frameworks TDD et BDD
Comment implémentons-nous les boucles de manière fonctionnelle? Quelle est la différence entre les boucles dans le style OOP et FP?
Nous savons comment implémenter des boucles dans le style orienté objet: en utilisant des variables temporaires mutables, mettez à jour la valeur de la variable et utilisez des constructions de boucle. C’est une approche très fastidieuse et peu sûre. Ce n’est pas thread-safe. Le style orienté objet utilise les constructions suivantes pour implémenter des boucles:
- Constructions de boucle
- Mutabilité
- Effets secondaires
Nous pouvons implémenter les mêmes boucles de manière différente en utilisant une approche fonctionnelle. C’est sûr pour les threads. Nous pouvons utiliser les deux techniques suivantes pour implémenter les boucles de manière fonctionnelle :
- Récursion
- Récursion de queue
- Immuabilité
- Aucun effet secondaire
Qu’est-ce qu’une « Application » en Scala ou qu’est-ce que Scala Application ? Qu’est-ce qu’un « App » en Scala ? Quel est l’usage de App en Scala ?
Application Scala : En Scala, App est un trait défini dans le package scala comme « scala.App ». Il définit la méthode principale. Si un objet ou une classe étend ce trait, ils deviendront automatiquement des programmes exécutables Scala car ils hériteront de la méthode principale de Application. L’avantage principal de l’utilisation de App est que nous n’avons pas besoin d’écrire la méthode principale. L’inconvénient principal de l’utilisation de App est que nous devons utiliser le même nom « args » pour faire référence à l’argument de la ligne de commande, car la méthode main() de scala.App utilise ce nom. Exemple :- Sans Scala App :
object MyApp {
def main( args: Array[String]){
println("Hello World!")
}
}
Avec Scala App :
object MyApp extends App{
println("Hello World!")
}
Si nous observons les deux exemples ci-dessus, dans le deuxième exemple, nous n’avons pas défini la méthode principale car nous avons hérité de Scala App(Application). Avant Scala 2.9, nous avions le trait scala.Application. Cependant, il est obsolète depuis la version 2.9 de Scala.
Est-ce que Scala prend en charge la surcharge d’opérateur ? Est-ce que Java prend en charge la surcharge d’opérateur ?
Java ne prend pas en charge la surcharge d’opérateur. Scala prend en charge la surcharge d’opérateur. La raison en est que Java ne veut pas prendre en charge certains noms de méthode trompeurs comme « +*/ ». Scala a donné cette flexibilité au développeur pour décider quels noms de méthodes/fonctions doivent être utilisés. Lorsque nous appelons 2 + 3, cela signifie que ‘+’ n’est pas un opérateur, c’est une méthode disponible dans la classe Int (ou son type implicite). En interne, cet appel est converti en « 2.+(3)« .
Qu’est-ce qu’une expression ? Qu’est-ce qu’une instruction ? Quelle est la différence entre une expression et une instruction ?
Expression: L’expression est une valeur qui signifie qu’elle sera évaluée en une valeur. Comme une expression renvoie une valeur, nous pouvons l’attribuer à une variable. Exemple : la condition If de Scala, l’opérateur ternaire de Java. Statement: Une instruction définit une ou plusieurs actions ou opérations. Cela signifie que l’instruction effectue des actions. Comme elle ne renvoie pas de valeur, nous ne pouvons pas l’attribuer à une variable. Exemple : la condition If de Java.
Quelle est la différence entre le « If…Else » de Java et le « If…Else » de Scala ?
« If…Else » de Java : En Java, « If…Else » est une instruction, pas une expression. Elle ne renvoie pas de valeur et ne peut pas être attribuée à une variable. Exemple :
int year;
if( count == 0)
year = 2014;
else
year = 2015;
« If…Else » de Scala : En Scala, « If…Else » est une expression. Elle évalue une valeur, c’est-à-dire qu’elle renvoie une valeur. Nous pouvons l’attribuer à une variable.
val year = if( count == 0) 2014 else 2015
**REMARQUE :** Le « If…Else » de Scala fonctionne comme l’opérateur ternaire de Java. Nous pouvons utiliser le « If…Else » de Scala comme l’instruction « If…Else » de Java, comme indiqué ci-dessous :
val year = 0
if( count == 0)
year = 2014
else
year = 2015
Scala est un langage orienté expression ou langage orienté déclaration? Java est-il un langage orienté expression ou langage orienté déclaration?
En Scala, tout est une valeur. Toutes les expressions ou déclarations évaluent à une valeur. Nous pouvons attribuer une expression, une fonction, une fermeture, un objet, etc. à une variable. Ainsi, Scala est un langage orienté expression. En Java, les déclarations ne sont pas des expressions ou des valeurs. Nous ne pouvons pas les attribuer à une variable. Donc, Java n’est pas un langage orienté expression. C’est un langage orienté déclaration.
Donnez-moi quelques fonctionnalités prises en charge par Java mais pas par Scala, et vice versa?
- Java ne prend pas en charge la surcharge d’opérateurs, mais Scala la prend en charge.
- Java prend en charge les opérateurs ++ et —, mais Scala ne les prend pas en charge.
- Java a des exceptions vérifiées et non vérifiées, mais Scala n’a pas d’exceptions vérifiées.
- Scala ne prend pas en charge les instructions break et continue, mais Java les utilise.
- Scala n’a pas de conversion de type explicite, mais Java prend en charge cette fonctionnalité.
- Scala prend en charge la correspondance de motifs, mais Java non.
- Java utilise des types de données primitifs, mais Scala n’en a pas.
- Java prend en charge les membres statiques, mais Scala n’a pas de concept de membres statiques.
- Scala prend en charge les implicites et les traits, Java ne les prend pas en charge.
**REMARQUE :** Cette liste dépasse une page. Cependant, voici quelques points importants à retenir sur les différences entre les fonctionnalités de Scala et de Java pour faire face aux entretiens Scala.
Quelle est la différence entre une fonction et une méthode en Scala ?
Scala prend en charge à la fois les fonctions et les méthodes. Nous utilisons la même syntaxe pour définir les fonctions et les méthodes, il n’y a pas de différence de syntaxe. Cependant, ils ont une légère différence :
- Nous pouvons définir une méthode dans une classe ou un trait Scala. La méthode est associée à un objet (une instance d’une classe). Nous pouvons appeler une méthode en utilisant une instance d’une classe. Nous ne pouvons pas utiliser une méthode Scala directement sans utiliser d’objet.
- Une fonction n’est pas associée à une classe ou à un trait. Elle est définie dans un package Scala. Nous pouvons accéder aux fonctions sans utiliser d’objets, comme les méthodes statiques de Java.
NOTE :- Nous discuterons de Classe, Trait, Package, Objet, etc. dans mes prochains messages.
Combien de fichiers de classe publics sont possibles à définir dans un fichier source Scala?
En Java, nous pouvons définir au plus une classe/interface publique dans un fichier source. Contrairement à Java, Scala prend en charge plusieurs classes publiques dans le même fichier source. Nous pouvons définir n’importe quel nombre de classes/interfaces/traits publics dans un fichier source Scala.
Comme en Java, quels sont les imports par défaut dans le langage Scala?
Nous savons que java.lang est le package par défaut importé dans tous les programmes Java par JVM automatiquement. Nous n’avons pas besoin d’importer ce package explicitement. De la même manière, voici les imports par défaut disponibles dans tous les programmes Scala:
- le package java.lang
- le package scala
- scala.PreDef
Combien d’opérateurs y a-t-il en Scala et pourquoi?
Contrairement à Java et à l’instar de C++, Scala prend en charge la surcharge d’opérateurs. Scala a un seul opérateur, qui est l’opérateur « = » (égal). À part cela, ce ne sont que des méthodes. Par exemple, 2 + 3, ici « + » n’est pas un opérateur en Scala. « + » est une méthode disponible dans la classe Int. Le compilateur Scala observe que 2 et 3 sont des entiers et tente de trouver la méthode « + » dans la classe Int. Le compilateur Scala convertit donc l’expression « 2 + 3 » en « 2.+(3) » et appelle la méthode « + » sur l’objet entier « 2 » et passe l’objet entier « 3 » en tant que paramètre à la méthode « + ». « 2 + 3 » et « 2.+(3) » sont équivalents. C’est juste du sucre syntaxique de Scala pour écrire des programmes dans un style fonctionnel.
Mentionnez quelques mots-clés utilisés par Java et non requis en Scala? Pourquoi Scala ne les nécessite pas?
Java utilise les mots-clés suivants de manière extensive:
- Le mot-clé « public » – pour définir des classes, des interfaces, des variables, etc.
- Le mot-clé « static » – pour définir des membres statiques.
Scala ne nécessite pas ces deux mots-clés. Scala n’a pas les mots-clés ‘public’ et ‘static’.
- En Scala, le modificateur d’accès par défaut est ‘public’ pour les classes, les traits, les méthodes/fonctions, les champs, etc. C’est pourquoi le mot-clé ‘public’ n’est pas nécessaire.
- Pour soutenir les principes de la POO, l’équipe Scala a évité le mot-clé ‘static’. C’est pourquoi Scala est un langage de programmation orienté objet pur. Il est très difficile de traiter les membres statiques dans les applications de concurrence.
Qu’est-ce que PreDef en Scala? Quel est le but principal de PreDef en Scala? En Scala, PreDef est un objet défini dans le package scala en tant que « scala.PreDef ». C’est un objet utilitaire. Il définit de nombreuses méthodes utilitaires comme indiqué ci-dessous:
- IO Console (print, println, etc.)
- Méthodes utilitaires de collection
- Méthodes utilitaires de chaîne
- Méthodes de conversion implicite
- Méthodes utilitaires d’assertion, etc.
Par exemple, les méthodes print, println, readLine, readInt, require, etc. sont définies dans l’objet PreDef. En Scala, PreDef est disponible pour utiliser ses méthodes sans les importer dans tous les programmes Scala car le compilateur Scala importe cet objet dans toutes les unités de compilation comme les classes, les objets, les traits, etc. automatiquement. Voilà tout sur les « Questions et réponses de base sur Scala ». Nous discuterons de certaines questions d’entretien Scala intermédiaires, avancées et en temps réel dans mes prochains articles. Veuillez me laisser un commentaire si vous aimez mon message ou si vous avez des problèmes/suggestions.
Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers