Avant de lire ce post, veuillez parcourir mes deux posts précédents sur les questions et réponses aux entretiens en Scala, à « Scala Basic » et « Scala Intermediate« , pour acquérir des connaissances de base sur le langage Scala.
Scala Advanced Interview Questions
Dans ce post, nous allons discuter de certaines questions avancées d’entretien en Scala liées aux concepts avancés de Scala, ainsi que de certains concepts liés aux projets en temps réel. Remarque : Comme cette liste est déjà devenue très longue, je vais publier un autre post avec les questions et réponses restantes. Veuillez vous référer à ce post à l’adresse : « Scala Intermediate and Advanced Interview Questions and Answers« . Nous aborderons également les questions et réponses sur la concurrence et la parallélisme en Scala/Java, qui sont utiles pour les développeurs Scala/Java seniors ou expérimentés.
Scala Advanced Interview Questions
Dans cette section, nous allons répertorier toutes les questions d’entretien intermédiaires sur Scala, puis dans la section suivante, nous les discuterons en détail.
- Quelle est la dernière version de Scala actuellement? Quel est le principal changement ou mise à jour dans Scala 2.12?
- Qu’est-ce qu’une Option en Scala? Qu’est-ce que Some et None? Quel est le modèle de conception Option/Some/None en Scala?
- Qu’est-ce qu’un Either en Scala? Qu’est-ce que Left et Right en Scala? Expliquez le modèle de conception Either/Left/Right en Scala.
- Quelle est la construction équivalente à Option de Scala en Java SE 8? À quoi sert Option en Scala?
- Quels sont les avantages de la programmation fonctionnelle (FP) ou les avantages des fonctions pures?
- Quels sont les frameworks populaires basés sur Scala pour développer des services Web RESTful ou des API REST?
- Quel est le meilleur framework pour générer la documentation des API REST pour les applications basées sur Scala?
- Comme Hibernate pour les applications basées sur Java, quels sont les frameworks ORM populaires disponibles pour une utilisation dans les applications basées sur Play/Scala?
- Quel est le meilleur outil pour développer des applications Play/Scala pour persister des données dans la base de données NoSQL MongoDB?
- Quels sont les clients populaires qui utilisent Play et Scala pour développer leurs applications?
- Quel est le meilleur langage à utiliser avec le framework Play: Scala ou Java?
- Comment Scala prend en charge à la fois des applications hautement évolutives et à haute performance?
- Quels sont les outils de construction disponibles pour développer des applications basées sur Play et Scala?
- Qu’est-ce que SBT? Quel est le meilleur outil de construction pour développer des applications Play et Scala?
- Quels sont les frameworks de test unitaire, de test fonctionnel et/ou de BDD disponibles pour les applications basées sur Play et Scala ?
- Quel est le meilleur outil de couverture de code disponible pour les applications basées sur Play et Scala ?
- Quel est le meilleur outil de vérification de style Scala disponible pour les applications basées sur Play et Scala ?
- Quels IDE prennent en charge le développement d’applications basées sur Play et Scala et comment ?
- Quel est le framework de test unitaire et fonctionnel par défaut pour Play ? Quel est l’outil de build par défaut pour Play ? Quel est le moteur de modèle par défaut pour Play ? Quel est le serveur web intégré disponible dans Play Framework ?
- Pourquoi Scala est-il meilleur que Java ? Quels sont les avantages de Scala par rapport à Java (Java 8) ? Comparé à Java, quels sont les principaux avantages ou bénéfices de Scala ?
- Qu’est-ce qu’une fonction anonyme en Scala ? Qu’est-ce qu’un littéral de fonction en Scala ? Quels sont les avantages d’une fonction anonyme/littéral de fonction en Scala ?
- Qu’est-ce qu’une fonction d’ordre supérieur (HOF) ?
- Quelles sont les différences entre une classe Case et une classe normale ?
- Quels sont les avantages de la pile Play/Scala pour développer des applications web ?
- Qu’est-ce que l’appel par nom ? Scala et Java prennent-ils en charge l’appel par nom ? Quelle est la différence entre les paramètres de fonction passés par valeur et par nom ?
- Quelles sont les constructions orientées objet de Java non prises en charge par Scala ? Quelles sont les constructions orientées objet de Scala non prises en charge par Java ? Quelles sont les nouvelles constructions orientées objet introduites par Scala, mais non prises en charge par Java ?
- Quels sont les frameworks MVC populaires pour le langage Scala pour développer des applications web ?
- Quelles sont les principales différences entre la structure des projets Maven basés sur Java et ceux basés sur Scala?
- Qu’est-ce qu’un Extractor en Scala? Quelle est la différence entre un Constructeur et un Extractor en Scala? Quel est l’usage d’un Extractor en Scala?
- À quoi sert ‘???’ dans les applications basées sur Scala?
- Expliquez la principale différence entre List et Stream dans l’API de collection Scala. Comment pouvons-nous prouver cette différence? Quand devrions-nous choisir Stream?
- Quelle est la différence entre :: et #:: en Scala? Quelle est la différence entre ::: et #::: en Scala?
- Si je veux devenir un développeur Fullstack Scala, quel ensemble de technologies devrais-je apprendre?
Questions et réponses avancées Scala
Dans cette section, nous examinerons chaque question de la liste ci-dessus en détail avec des exemples appropriés (si nécessaire). Si vous souhaitez comprendre ces concepts en profondeur avec des exemples, veuillez consulter mes publications précédentes dans la section Tutoriels Scala.
Quelle est la dernière version actuelle de Scala ? Quel est le changement majeur ou la mise à jour dans Scala 2.12 ?
La version stable actuelle de Scala est 2.11.7. Elle prend en charge Java SE 7. Le changement majeur ou la mise à jour dans la version Scala 2.12 est qu’elle prend en charge Java SE 8 ou des versions ultérieures uniquement. Scala 2.12 n’est pas compatible binaire avec la série 2.11.x. Elle est toujours en version Mile Stone Builds seulement.
Qu’est-ce que Option en Scala ? Qu’est-ce que Some et None ? Quel est le modèle de conception Option/Some/None en Scala ?
En Scala, Option est utilisé pour représenter des valeurs optionnelles qui existent ou n’existent pas. Option est une classe abstraite. Option a deux sous-classes : Some et None. Les trois (Option, Some et None) sont définis dans le package « scala » comme « scala.Option ». Option est une collection bornée en Scala, qui contient soit zéro, soit un élément. Si Option ne contient aucun élément, c’est None. Si Option contient un élément, c’est Some. Some est utilisé pour représenter une valeur existante. None est utilisé pour représenter une valeur non existante. Exemple :
def get(val index: Int): Option[String]
Supposons que cette méthode provienne de List. Cette méthode a un type de retour Option[String]. Si List contient des éléments, cette méthode get renvoie l’élément « Some[String] » disponible à cette position d’index. Sinon, elle renvoie « None » (c’est-à-dire qu’il n’y a pas d’éléments). Some est une classe de cas et None est un objet. Comme ce sont tous deux des classes d’objet/cas, nous pouvons les utiliser très bien dans la correspondance de motifs. La combinaison de ces trois définitions est connue sous le nom de modèle de conception Option/Some/None en Scala.
Qu’est-ce que Either en Scala? Quels sont Left et Right en Scala? Expliquez le modèle de conception Either/Left/Right en Scala?
En Scala, Either est une classe abstraite. Elle est utilisée pour représenter une valeur parmi deux types possibles. Elle prend deux paramètres de type: Either[A,B]. Elle a exactement deux sous-types: Left et Right. Si Either[A,B] représente une instance A, cela signifie qu’elle est Left. Si elle représente une instance B, cela signifie qu’elle est Right. Cela est connu sous le nom de modèle de conception Either/Left/Right en Scala.
Quelle est la construction équivalente de l’Option de Scala en Java SE 8 ? Quelle est l’utilisation de l’Option en Scala ?
L’Option de Scala est similaire à l’Optional de Java SE 8. Java SE 8 a introduit une nouvelle classe utilitaire Optional pour représenter l’existence ou la non-existence d’une valeur. Optional est disponible dans le package java.util. L’Option de Scala et l’Optional de Java SE 8 sont tous deux utilisés pour représenter des valeurs optionnelles, évitant ainsi les vérifications inutiles de null et les NullPointerException.
Quels sont les avantages de la programmation fonctionnelle (FP) ou les avantages des fonctions pures ?
Voici les avantages de la programmation fonctionnelle (FP) ou des fonctions pures :
- Plus modulaire
- Plus facile à comprendre ou plus facile à raisonner
- Plus facile à tester
- Moins sujet aux bugs
- Plus facile à réutiliser
- Plus facile à paralléliser et à généraliser
Quels sont les frameworks Scala les plus populaires pour développer des services web RESTful ou des API REST ?
Il existe de nombreux frameworks basés sur Scala pour développer des services web RESTful. Les frameworks les plus populaires sont :
- Play Framework
Dans Play, nous appelons les URLs des API REST des routes. Nous regroupons toutes les routes au même endroit dans le framework Play. C’est un framework web sans état pour développer facilement des API REST.- Scalatra Framework
Il s’agit d’un framework web basé sur Scala très simple et facile pour développer des API REST.- Spray Framework
Il est très concis et construit sur le framework Akka, ce qui le rend meilleur pour développer des API REST en utilisant le modèle d’acteur.- Lift Framework
Il permet le routage en utilisant le concept de correspondance de motifs.
Quel est le meilleur framework pour générer la documentation des API REST pour les applications basées sur Scala ?
Swagger est l’outil idéal à cet effet. C’est un outil simple et open source pour générer la documentation des API REST avec JSON pour les applications basées sur Scala.
- Si nous utilisons Play with Scala pour développer votre API REST, nous pouvons utiliser le module play-swagger pour la documentation de l’API REST.
- Si nous utilisons Spray with Scala pour développer votre API REST, nous pouvons utiliser le module spray-swagger pour la documentation de l’API REST.
Tout comme Hibernate pour les applications basées sur Java, quels sont les frameworks ORM populaires disponibles pour une application basée sur Play/Scala?
Tout comme JPA, Hibernate et Toplink, il existe de nombreux frameworks ORM à utiliser dans les applications basées sur Play/Scala. Les frameworks ORM populaires pour les applications basées sur Play/Scala sont :
- Slick
- Anorm
- SORM(Scala ORM)
- Squeryl
Quel est le meilleur outil pour développer des applications Play/Scala pour persister des données dans une base de données MongoDB NoSQL?
ReactiveMongo est le meilleur pilote Scala pour développer des applications Play/Scala pour persister des données dans la base de données NoSQL MongoDB. Il prend en charge des opérations d’E/S entièrement non bloquantes et asynchrones.
Clients populaires qui utilisent Play et Scala pour développer leurs applications?
Des milliers de clients utilisent Play et Scala en production. La liste suivante répertorie les clients les plus populaires qui utilisent activement Play et Scala.
- The Guardian
- Ocado
- LuchidChart
- GOV.UK
Quel est le meilleur langage à utiliser avec le framework Play : Scala ou Java?
Play 2 est entièrement écrit en Scala. Si nous utilisons Java avec le framework Play, nous devons faire face à de nombreux problèmes car Java ne prend pas en charge toutes les fonctionnalités de la programmation fonctionnelle. Scala est la meilleure option à utiliser avec le framework Play pour développer des applications hautement évolutives, offrant de meilleures performances avec une concurrence/parallélisme et une latence faibles, car :
- Play 2 est entièrement écrit en Scala.
- Il prend en charge toutes les fonctionnalités FP.
- Il s’agit davantage d’un langage d’expression que de Java.
- Il prend en charge très facilement le modèle Akka Actor.
- Il prend en charge certaines nouvelles fonctionnalités de POO telles que les Traits.
- Les modèles intégrés de Play sont développés en Scala.
Comment Scala prend en charge à la fois des applications hautement évolutives et hautement performantes ?
Comme Scala prend en charge la programmation multi-paradigme (à la fois OOP et FP) et utilise le modèle de concurrence des acteurs, nous pouvons développer très facilement des applications hautement évolutives et performantes.
Quels sont les outils de construction disponibles pour développer des applications basées sur Play et Scala ?
Les trois outils de construction les plus populaires disponibles pour développer des applications Play et Scala sont les suivants :
- SBT
- Maven
- Gradle
Qu’est-ce que SBT? Quel est le meilleur outil de construction pour développer des applications Play et Scala?
SBT signifie Scala Build Tool. C’est un outil de construction simple pour développer des applications basées sur Scala. La plupart des gens utilisent l’outil de construction SBT pour les applications Play et Scala. Par exemple, le plugin Scala IntelliJ IDEA utilise par défaut SBT comme outil de construction à cette fin.
Quels sont les cadres de test unitaire, de test fonctionnel et/ou de BDD disponibles pour les applications basées sur Play et Scala?
Voici les cadres de test unitaire, de test fonctionnel et/ou de BDD les plus populaires disponibles pour les applications basées sur Play/Scala:
- Spec2
- ScalaTest
- ScalaCheck
- Mokito
Quel est le meilleur outil de couverture de code disponible pour les applications basées sur Play et Scala ?
SCoverage est l’outil de couverture de code pour les applications basées sur Play et Scala. SCoverage signifie Scala Code-coverage tool. Il possède trois plug-ins distincts pour prendre en charge les outils de build suivants :
- SBT
- Maven
- Gradle
Quel est le meilleur outil de vérification de style Scala disponible pour les applications basées sur Play et Scala ?
Tout comme Checkstyle pour les applications basées sur Java, Scalastyle est le meilleur outil de vérification de style Scala disponible pour les applications basées sur Play et Scala. Scalastyle observe notre code source Scala et indique les problèmes potentiels. Il possède trois plug-ins distincts pour prendre en charge les outils de build suivants :
- SBT
- Maven
- Gradle
Il possède deux plug-ins distincts pour prendre en charge les deux IDE suivants :
- IntelliJ IDEA
- Eclipse IDE
Quels IDE prennent en charge le développement d’applications Play et Scala et comment ?
Les deux IDE populaires suivants prennent en charge le développement d’applications Play et Scala :
- IntelliJ IDEA
- Eclipse IDE
Ils prennent en charge en utilisant des plugins Scala comme Eclipse IDE a un Scala IDE for Eclipse pour prendre en charge le développement d’applications Play et Scala. IntelliJ IDEA a un plugin comme « Scala Plugin for IntelliJ IDEA » pour prendre en charge les applications basées sur « Scala, SBT et Play 2 Framework ». – Quel est le framework de test unitaire et fonctionnel par défaut pour Play ? Quel est l’outil de construction par défaut pour Play ? Quel est le moteur de modèle par défaut pour Play ? Quel est le serveur Web intégré disponible dans Play Framework ? Le framework de test unitaire et fonctionnel par défaut de Play Framework est Spec2. Il est très facile de tester les applications basées sur Play/Scala en utilisant le framework Spec2. Le modèle intégré par défaut de Play Framework est « Twirl ». Il a été développé en Scala. En utilisant ces modèles, nous pouvons développer des applications basées sur Play/Scala très facilement. Le serveur Web intégré ou par défaut disponible pour Play Framework est le serveur Netty.
Pourquoi Scala est-il meilleur que Java? Quels sont les avantages de Scala par rapport à Java (Java 8)? Comparé à Java, quels sont les principaux avantages ou bénéfices de Scala?
Parce que Scala prend en charge les fonctionnalités supplémentaires suivantes, il est meilleur que Java 8 :
- Fonctionnalités FP complètes
- Langage d’expression plus riche
- Correspondance de motifs
- Meilleure prise en charge du modèle d’acteurs Akka
- Résolution automatique du problème du diamant d’héritage avec les traits
- Programmation IO asynchrone et non bloquante avec le framework Akka
- API de streaming entièrement réactive
Qu’est-ce qu’une fonction anonyme en Scala? Qu’est-ce qu’un littéral de fonction en Scala? Quels sont les avantages d’une fonction anonyme/littérale en Scala?
Fonction anonyme est aussi une fonction mais elle n’a pas de nom de fonction. Elle est également connue sous le nom de littéral de fonction. Les avantages d’une fonction anonyme / littérale de fonction en Scala :
- Nous pouvons assigner un littéral de fonction à une variable
- Nous pouvons passer un littéral de fonction à une autre fonction / méthode
- Nous pouvons retourner un littéral de fonction comme résultat / valeur de retour d’une autre fonction / méthode.
Qu’est-ce qu’une fonction d’ordre supérieur (HOF) ?
Une fonction d’ordre supérieur (HOF) est également une fonction mais qui effectue une, deux ou les deux des actions suivantes :
- Prendre d’autres fonctions en tant qu’arguments
- Retourner des fonctions en tant que résultats
Quelles sont les différences entre une classe Case et une classe Normale ?
Une classe Case est également une classe, cependant lorsque nous la comparons avec une classe normale, elle offre les avantages ou fonctionnalités supplémentaires suivants :
- Par défaut, les paramètres du constructeur de la classe Case sont des ‘val’. Nous n’avons pas besoin de déclarer les paramètres avec ‘val’.
- Par défaut, les paramètres du constructeur de la classe Case deviennent des champs de classe.
- Ces méthodes sont ajoutées automatiquement : toString, equals, hashCode, copy. apply et unapply.
- Il obtient automatiquement l’objet Companion.
- Pas besoin d’utiliser le mot-clé ‘new’ pour créer une instance de la classe Case.
- Facile à utiliser dans la correspondance de motifs.
Toutes ces fonctionnalités sont ajoutées par le compilateur Scala au moment de la compilation. Ce n’est pas possible avec une classe normale.
Quels sont les avantages de l’ensemble Play/Scala pour développer des applications web ?
Les principaux avantages de l’ensemble Play/Scala pour développer des applications web sont les suivants :
- Open Source
Play est un framework open-source de logiciel libre pour développer des applications web. – Meilleure productivité
La fonctionnalité de rechargement automatique du framework Play améliore la productivité des développeurs. Plus besoin de construire, déployer et tester nos modifications. Il suffit de faire nos changements et de rafraîchir la page pour voir les modifications. – Stateless et facile à développer des API REST
Play est un modèle stateless basé sur HTTP pour servir des requêtes web, il est donc très facile de développer des API REST ou des services web RESTful. – Meilleure gestion des erreurs
Si nous développons notre application web en utilisant le framework Play, il nous informe de toutes les erreurs dans le navigateur sous un format très utile. Il affiche le message d’erreur, l’emplacement du fichier, le numéro de ligne où l’erreur s’est produite, met en évidence le code source pour comprendre facilement l’erreur. – Haute performance et meilleure évolutivité avec le Reactive
Le framework Play est développé en suivant les modèles de conception réactifs et il est construit sur le serveur Netty pour utiliser la fonctionnalité d’E/S non bloquante. Grâce à cette fonctionnalité, nous pouvons développer très facilement des applications hautement évolutives et performantes. – Facilité d’extension
Play est un framework très flexible et prend en charge le développement de plug-ins pour étendre facilement ses fonctionnalités et sa fonctionnalité. – Haute concurrence et meilleure parallélisme
Comme Scala et Play supportent tous deux la programmation fonctionnelle, il est très facile de développer des applications avec une haute concurrence et un meilleur parallélisme, car la programmation fonctionnelle prend en charge l’immuabilité, les fonctions pures (fonctions sans effets secondaires), la correspondance de motifs, le modèle d’acteur, etc. – Meilleure réutilisabilité, facilité de test et plus de modularité
Comme Scala et Play supportent tous deux la programmation fonctionnelle, nous pouvons développer des applications plus modulaires et réutilisables. Il est également très facile de tester des applications plus modulaires.
Quels sont les concepts de POO de Java non pris en charge par Scala? Quels sont les concepts de POO de Scala non pris en charge par Java? Quels sont les nouveaux concepts de POO introduits par Scala, mais non pris en charge par Java?
Concepts de POO de Java non pris en charge par Scala:
- Il n’y a pas de concept d’interface en Scala
- Il n’y a pas de concept d’énumération en Scala
Concepts de POO de Scala non pris en charge par Java ou Nouveaux concepts de POO introduits par Scala mais non pris en charge par Java:
- Traits de Scala
- Résolution automatique du problème du diamant d’héritage.
Qu’est-ce que l’appel par nom ? Scala et Java prennent-ils en charge l’appel par nom ? Quelle est la différence entre les paramètres de fonction passés par valeur et ceux passés par nom ?
L’appel par nom signifie évaluer les paramètres de méthode/fonction uniquement lorsque nous en avons besoin ou que nous y accédons. Si nous ne les utilisons pas, alors ils ne sont pas évalués. Scala prend en charge à la fois les paramètres de fonction passés par valeur et par nom. Cependant, Java ne prend en charge que les paramètres passés par valeur, mais pas par nom. Différence entre les paramètres de fonction passés par valeur et par nom : La principale différence entre ces deux méthodes est décrite ci-dessous :
- Dans l’appel par nom, les paramètres de fonction sont évalués uniquement lorsque cela est nécessaire, mais pas lorsque la fonction est appelée.
- Dans l’appel par valeur, les paramètres de fonction sont évalués lorsque la fonction est appelée.
- Dans l’appel par valeur, les paramètres sont évalués avant l’exécution de la fonction et ils ne sont évalués qu’une seule fois, quelle que soit le nombre de fois où nous les avons utilisés dans cette fonction.
- Dans l’appel par nom, les paramètres sont évalués chaque fois que nous y accédons et ils sont évalués chaque fois que nous les utilisons dans cette fonction.
- Différences de syntaxe Scala
Appel par valeur :
def myFunction(a: Int, b: Int) { }
Ici, les paramètres a et b sont des paramètres Call-by-value pour ma fonction. Call-by-name:
def myFunction(a: Int, b: => Int) { }
Ici, le paramètre a est un paramètre Call-by-value et le paramètre b est un paramètre Call-by-name pour ma fonction.
Quels sont les frameworks MVC populaires pour le langage Scala pour développer des applications Web ?
Voici les frameworks MVC les plus populaires disponibles pour le langage Scala pour développer des applications Web :
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
Quelles sont les principales différences entre la structure d’un projet Maven basé sur Java et celle d’un projet Maven basé sur Scala ?
La plupart des projets basés sur Java utilisent Maven comme outil de construction. Cependant, la plupart des gens utilisent SBT comme outil de construction pour développer leurs applications basées sur Scala, mais certaines équipes utilisent également Maven comme outil de construction pour développer leurs applications basées sur Scala. La structure des dossiers Maven pour les projets basés sur Java et Scala est presque la même, à l’exception d’un changement de nom de dossier comme indiqué dans les diagrammes ci-dessous : noms de dossiers java et scala.
Structure du dossier du projet Maven basé sur Java :
Structure du dossier du projet Maven basé sur Scala :
Qu’est-ce qu’un Extractor en Scala ? Quelle est la différence entre un Constructeur et un Extractor en Scala ? Quel est l’usage d’un Extractor en Scala ?
Non seulement en Java et Scala, mais dans presque tous les langages orientés objet, un constructeur est utilisé pour créer (ou assembler) un objet ou une instance d’une classe en utilisant ses paramètres (ou composants). Un extracteur est tout à fait le contraire d’un constructeur. En Scala, un extracteur est utilisé pour décomposer ou désassembler un objet en ses paramètres (ou composants). En Scala, la méthode apply est un constructeur. En interne, un extracteur utilise la méthode unapply pour décomposer un objet en ses parties (ou paramètres). En Scala, un extracteur est principalement utilisé dans le concept de correspondance de motifs. Nous discuterons bientôt du concept de correspondance de motifs.
Quelle est l’utilité de ‘???’ dans les applications basées sur Scala ?
Ces trois points d’interrogation ‘???’ ne sont ni un opérateur ni une méthode en Scala. Ils sont utilisés pour marquer une méthode qui est « en cours de développement », ce qui signifie que le développeur doit fournir une implémentation pour celle-ci. Cette méthode est définie dans la classe scala.PreDef comme indiqué ci-dessous :
def ??? : Nothing = throw new NotImplementedError
Si nous exécutons cette méthode sans fournir d’implémentation, cela génère une erreur ‘NotImplementedError’, comme indiqué ci-dessous :
scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int
scala> add(10,20)
scala.NotImplementedError: an implementation is missing
Expliquez la principale différence entre List et Stream dans l’API Collection de Scala ? Comment prouvons-nous cette différence ? Quand choisissons-nous Stream ?
En Scala, à la fois List et Stream proviennent de l’API Collection et fonctionnent presque de manière similaire. Tous deux sont des collections immuables. Cependant, il existe une différence principale entre List et Stream dans l’API Collection de Scala : les éléments de List sont évalués de manière impatiente et les éléments de Stream sont évalués de manière paresseuse, ce qui signifie lorsqu’on y accède.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
Ici, nous pouvons observer que tous les éléments de List sont évalués au moment de la création de l’objet List. Cependant, si nous faisons la même chose sur Stream, nous ne pouvons pas voir tous les éléments. Nous ne pouvons voir que le premier élément évalué et les éléments restants sont évalués de manière paresseuse comme illustré ci-dessous :
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
Lorsque nous voulons qu’une collection paresseuse évalue les éléments uniquement lorsque nous y accédons, il est préférable d’utiliser Stream.
Quelle est la différence entre :: et #:: en Scala ? Quelle est la différence entre ::: et #::: en Scala ?
Dans l’API Scala Collection,
- :: et ::: sont des méthodes disponibles dans la classe List.
- #:: et #::: sont des méthodes disponibles dans la classe Stream.
- Dans la classe List, la méthode :: est utilisée pour ajouter un élément au début de la liste.
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)
- Dans la classe List, la méthode ::: est utilisée pour concaténer les éléments d’une liste donnée devant cette liste.
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)
- Dans la classe Stream, la méthode #:: est utilisée pour ajouter un élément donné au début du flux. Seul cet élément nouvellement ajouté est évalué et suivi par les éléments du flux évalués de manière paresseuse.
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, ?)
- Dans la classe Stream, la méthode #::: est utilisée pour concaténer un flux donné au début du flux. Seul cet élément nouvellement ajouté est évalué et suivi par les éléments du flux évalués de manière paresseuse.
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, ?)
- La méthode :: fonctionne comme un opérateur cons pour la classe List et la méthode #:: fonctionne comme un opérateur cons pour la classe Stream. Ici, « cons » signifie constructeur.
- ::: La méthode fonctionne comme un opérateur de concaténation pour la classe List et #::: La méthode fonctionne comme un opérateur de concaténation pour la classe Stream.
Si je veux devenir développeur Fullstack Scala, quelle pile technologique devrais-je apprendre ?
Si vous voulez devenir développeur Fullstack Scala, vous devriez apprendre la pile technologique suivante :
- Scala 2.11.7
- Play 2.4.6 Framework
- Akka 2.3 Framework
- Un outil de build : SBT/Maven
- Un framework JS : CoffeeScript/JavaScript
- Un IDE : IntelliJ IDEA 15/ Eclipse IDE 4.x
- Un cadre de TDD & BDD : ScalaTest,Spec2,ScalaCheck,Mockito
- Micro Services avec Play et Scala
- SCoverage
- Scalastyle
- Design Patterns de Programmation Fonctionnelle
- Apprentissage Automatique avec Scala
{
« error »: « Upstream error… »
}
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions