Antes de leer este post, por favor revisa mis dos posts anteriores en “Scala Básico” y “Preguntas y Respuestas de Entrevistas Intermedias de Scala” para obtener algunos conocimientos básicos sobre el lenguaje Scala.
Preguntas Avanzadas de Entrevistas de Scala
En este post, vamos a discutir algunas Preguntas Avanzadas de Entrevistas de Scala que están relacionadas con los conceptos avanzados de Scala y también algunos conceptos relacionados con proyectos en tiempo real. Nota: Dado que esta lista ya se ha vuelto muy extensa, voy a publicar otro post con las preguntas y respuestas restantes. Por favor, consulta ese post en: “Preguntas y Respuestas de Entrevistas Intermedias y Avanzadas de Scala” También discutiremos Preguntas y Respuestas de Concurrencia y Paralelismo en Scala/Java, que son útiles para desarrolladores Senior o con experiencia en Scala/Java.
Preguntas Avanzadas de Entrevistas de Scala
En esta sección, vamos a enumerar todas las Preguntas Intermedias de Entrevista de Scala y en la siguiente sección las discutiremos en detalle.
- ¿Cuál es la última versión actual de Scala? ¿Cuál es el cambio o actualización principal en Scala 2.12?
- ¿Qué es Option en Scala? ¿Qué son Some y None? ¿Cuál es el Patrón de Diseño Option/Some/None en Scala?
- ¿Qué es Either en Scala? ¿Qué son Left y Right en Scala? ¿Explique el Patrón de Diseño Either/Left/Right en Scala?
- ¿Cuál es el equivalente de la construcción Option de Scala en Java SE 8? ¿Cuál es el uso de Option en Scala?
- ¿Cuáles son las Ventajas de la Programación Funcional (FP) o las Ventajas de las Funciones Puras?
- ¿Cuáles son los Marcos Populares Basados en Scala para desarrollar Servicios Web RESTful o API REST?
- ¿Cuál es el mejor Marco para generar documentación de API REST para aplicaciones basadas en Scala?
- Al igual que Hibernate para aplicaciones basadas en Java, ¿cuáles son los Marcos ORM Populares disponibles para usar en aplicaciones basadas en Play/Scala?
- ¿Cuál es la mejor herramienta para desarrollar aplicaciones Play/Scala para persistir datos en el almacén de datos NoSQL MongoDB?
- ¿Clientes populares que utilizan Play y Scala para desarrollar sus aplicaciones?
- ¿Cuál es el mejor lenguaje para usar con el marco Play: Scala o Java?
- ¿Cómo Scala admite aplicaciones altamente escalables y de alto rendimiento?
- ¿Cuáles son las Herramientas de Construcción disponibles para desarrollar Aplicaciones basadas en Play y Scala?
- ¿Qué es SBT? ¿Cuál es la mejor Herramienta de Construcción para desarrollar Aplicaciones basadas en Play y Scala?
- ¿Cuáles son los Frameworks disponibles para Unit Testing, Functional Testing y/o BDD para aplicaciones basadas en Play y Scala?
- ¿Cuál es la mejor herramienta de cobertura de código disponible para aplicaciones basadas en Play y Scala?
- ¿Cuál es la mejor herramienta de verificación de estilo Scala disponible para aplicaciones basadas en Play y Scala?
- ¿Qué IDEs admiten el desarrollo de aplicaciones basadas en Play y Scala y cómo?
- ¿Cuál es el Framework predeterminado para Unit y Functional Testing en Play? ¿Cuál es la herramienta de construcción predeterminada para Play? ¿Cuál es el motor de plantillas predeterminado para Play? ¿Cuál es el servidor web integrado disponible en el framework Play?
- ¿Por qué Scala es mejor que Java? ¿Cuáles son las ventajas de Scala sobre Java (Java 8)? En comparación con Java, ¿cuáles son las principales ventajas o beneficios de Scala?
- ¿Qué es una Función Anónima en Scala? ¿Qué es un Literal de Función en Scala? ¿Cuáles son las ventajas de una Función Anónima/Literal de Función en Scala?
- ¿Qué es una Función de Orden Superior (HOF)?
- ¿Cuáles son las diferencias entre una Case class y una Clase Normal?
- ¿Cuáles son las ventajas del stack Play/Scala para desarrollar aplicaciones web?
- ¿Qué es call-by-name? ¿Scala y Java admiten call-by-name? ¿Cuál es la diferencia entre los parámetros de función call-by-value y call-by-name?
- ¿Cuáles son los constructos OOP de Java no admitidos por Scala? ¿Cuáles son los constructos OOP de Scala no admitidos por Java? ¿Cuáles son los nuevos constructos OOP introducidos por Scala, pero no admitidos por Java?
- ¿Cuáles son los Frameworks MVC populares para el lenguaje Scala para desarrollar aplicaciones web?
- Cuáles son las principales diferencias entre la estructura de un proyecto basado en Java y uno basado en Scala en Maven?
- ¿Qué es un Extractor en Scala? ¿Cuál es la diferencia entre un Constructor y un Extractor en Scala? ¿Cuál es el uso de un Extractor en Scala?
- ¿Cuál es el uso de ‘???’ en aplicaciones basadas en Scala?
- Explique la principal diferencia entre List y Stream en la API de Colecciones de Scala. ¿Cómo demostramos esa diferencia? ¿Cuándo elegimos Stream?
- ¿Cuál es la diferencia entre :: y #:: en Scala? ¿Cuál es la diferencia entre ::: y #::: en Scala?
- Si quiero convertirme en un Desarrollador Fullstack de Scala, ¿qué pila de tecnología debería aprender?
Preguntas y respuestas avanzadas sobre Scala
En esta sección, abordaremos cada pregunta de la lista anterior y discutiremos en detalle con ejemplos adecuados (si es necesario). Si deseas comprender estos conceptos en profundidad con ejemplos, por favor revisa mis publicaciones anteriores en la sección de Tutoriales de Scala.
¿Cuál es la versión más reciente actual de Scala? ¿Cuál es el cambio o actualización principal en Scala 2.12?
La versión estable actual de Scala es 2.11.7. Es compatible con Java SE 7. El cambio o actualización principal en la versión Scala 2.12 es que solo es compatible con Java SE 8 o versiones posteriores. Scala 2.12 no es compatible binariamente con la serie 2.11.x. Todavía se encuentra en compilaciones de hitos únicamente.
¿Qué es Option en Scala? ¿Qué son Some y None? ¿Cuál es el patrón de diseño Option/Some/None en Scala?
En Scala, Option se utiliza para representar valores opcionales que pueden existir o no. Option es una clase abstracta. Option tiene dos subclases: Some y None. Todas las tres (Option, Some y None) están definidas en el paquete “scala” como “scala.Option”. Option es una colección acotada en Scala, que contiene cero o un elemento. Si Option no contiene elementos, eso es None. Si Option contiene un elemento, eso es Some. Some se utiliza para representar un valor existente. None se utiliza para representar un valor no existente. Ejemplo:-
def get(val index: Int): Option[String]
Supongamos que este método es de tipo Lista. Este método tiene un tipo de retorno de Option[String]. Si la Lista contiene elementos, este método get devuelve el elemento “Some[String]” disponible en esa posición de índice. De lo contrario, devuelve “None” (es decir, no hay elementos). Some es una clase de caso y None es un objeto. Dado que ambos son clase de caso/objeto, podemos usarlos muy bien en Coincidencia de Patrones. La combinación de estas tres definiciones se conoce como Patrón de Diseño Option/Some/None en Scala.
¿Qué es Either en Scala? ¿Qué son Left y Right en Scala? Explica el Patrón de Diseño Either/Left/Right en Scala?
En Scala, Either es una clase abstracta. Se utiliza para representar un valor de dos posibles tipos. Toma dos parámetros de tipo: Either[A,B]. Exactamente tiene dos subtipos: Left y Right. Si Either[A,B] representa una instancia A, eso significa que es Left. Si representa una instancia B, eso significa que es Right. Esto se conoce como Patrón de Diseño Either/Left/Right en Scala.
¿Cuál es el equivalente de la construcción Option en Scala en Java SE 8? ¿Cuál es el uso de Option en Scala?
Option en Scala es similar a Optional en Java SE 8. Java SE 8 ha introducido una nueva clase de utilidad Optional para representar la existencia o no existencia de algún valor. Optional está disponible en el paquete java.util. Tanto Option en Scala como Optional en Java SE 8 se utilizan para representar valores opcionales. Ambos se usan para evitar comprobaciones no deseadas de nulos y NullPointerException.
¿Cuáles son las ventajas de la Programación Funcional (FP) o las ventajas de las Funciones Puras?
Las siguientes son las ventajas de la Programación Funcional (FP) o las ventajas de las Funciones Puras:
- Más Modular
- Más fácil de entender o más fácil de razonar
- Más fácil de probar
- Menos propenso a errores
- Más fácil de reutilizar
- Más fácil de paralelizar y generalizar
¿Cuáles son los marcos populares basados en Scala para desarrollar servicios web RESTful o API REST?
Hay muchos marcos basados en Scala para desarrollar servicios web RESTful. Los marcos más populares son:
- Play Framework
En Play, llamamos a las URL de la API REST como rutas. Colocamos todas las rutas en un solo lugar en el marco de Play. Es un marco web sin estado para desarrollar fácilmente API REST.- Scalatra Framework
Es un marco web basado en Scala muy simple y fácil de desarrollar API REST.- Spray Framework
Es muy conciso y está construido sobre el marco Akka, por lo que es mejor desarrollar API REST utilizando el Modelo de Actores.- Lift Framework
Permite enrutamiento utilizando el concepto de coincidencia de patrones.
¿Cuál es el mejor marco para generar documentación de API REST para aplicaciones basadas en Scala?
Swagger es la mejor herramienta para este propósito. Es una herramienta muy simple y de código abierto para generar documentación de API REST con JSON para aplicaciones basadas en Scala.
- Si usamos Play with Scala para desarrollar su API REST, entonces use el módulo play-swagger para la documentación de la API REST.
- Si usamos Spray with Scala para desarrollar su API REST, entonces use el módulo spray-swagger para la documentación de la API REST.
Al igual que Hibernate para aplicaciones basadas en Java, ¿cuáles son los marcos de ORM populares disponibles para usar en aplicaciones basadas en Play/Scala?
Al igual que JPA, Hibernate y Toplink, etc., marcos de ORM para aplicaciones basadas en Java, hay muchos marcos de ORM para usar en aplicaciones basadas en Play/Scala. Marcos de ORM populares para aplicaciones basadas en Play/Scala:
- Slick
- Anorm
- SORM (Scala ORM)
- Squeryl
¿Cuál es la mejor herramienta para desarrollar aplicaciones Play/Scala para persistir datos en el almacén de datos NoSQL MongoDB?
ReactiveMongo es el mejor controlador de Scala para desarrollar aplicaciones Play/Scala y persistir datos en la base de datos NoSQL MongoDB. Admite operaciones de E/S completamente no bloqueantes y asíncronas.
¿Qué clientes populares utilizan Play y Scala para desarrollar sus aplicaciones?
Miles de clientes utilizan Play y Scala en producción. La siguiente lista incluye a algunos de los clientes más populares que utilizan activamente Play y Scala.
- The Guardian
- Ocado
- LuchidChart
- GOV.UK
¿Cuál es el mejor lenguaje para usar con el framework Play: Scala o Java?
Play 2 está completamente escrito en Scala. Si utilizamos Java con el framework Play, enfrentaremos muchos problemas porque Java no admite todas las características de la programación funcional. Scala es la mejor opción para usar con el framework Play y desarrollar aplicaciones altamente escalables, con mejor rendimiento en concurrencia/paralelismo y baja latencia, ya que:
- Play 2 está completamente escrito en Scala.
- Soporta todas las características de FP.
- Es más un lenguaje de expresión que Java.
- Soporta el modelo de actores de Akka muy fácilmente.
- Admite algunas nuevas características de OOP como Traits.
- Las plantillas integradas de Play están desarrolladas en Scala.
¿Cómo Scala soporta aplicaciones altamente escalables y de alto rendimiento?
Dado que Scala admite la programación multi-paradigma (tanto OOP como FP) y utiliza el Modelo de Concurrencia de Actores, podemos desarrollar aplicaciones muy escalables y de alto rendimiento muy fácilmente.
¿Cuáles son las herramientas de compilación disponibles para desarrollar aplicaciones basadas en Play y Scala?
Las siguientes tres son las herramientas de compilación más populares disponibles para desarrollar aplicaciones en Play y Scala:
- SBT
- Maven
- Gradle
¿Qué es SBT? ¿Cuál es la mejor herramienta de construcción para desarrollar aplicaciones Play y Scala?
SBT significa Scala Build Tool. Es una herramienta de construcción simple para desarrollar aplicaciones basadas en Scala. La mayoría de las personas utiliza la herramienta de construcción SBT para aplicaciones Play y Scala. Por ejemplo, el complemento Scala de IntelliJ IDEA utiliza SBT como herramienta de construcción de forma predeterminada para este propósito.
¿Cuáles son los marcos de prueba unitaria, prueba funcional y/o BDD disponibles para aplicaciones basadas en Play y Scala?
Los siguientes son los marcos de prueba unitaria, prueba funcional y/o BDD más populares disponibles para aplicaciones basadas en Play/Scala:
- Spec2
- ScalaTest
- ScalaCheck
- Mokito
¿Cuál es la mejor herramienta de cobertura de código disponible para aplicaciones basadas en Play y Scala?
SCoverage es la herramienta de cobertura de código para aplicaciones basadas en Play y Scala. SCoverage significa herramienta de cobertura de código Scala. Tiene tres complementos separados para admitir las siguientes herramientas de construcción:
- SBT
- Maven
- Gradle
¿Cuál es la mejor herramienta de verificación de estilo Scala disponible para aplicaciones basadas en Play y Scala?
Al igual que Checkstyle para aplicaciones basadas en Java, Scalastyle es la mejor herramienta de verificación de estilo Scala disponible para aplicaciones basadas en Play y Scala. Scalastyle observa nuestro código fuente Scala e indica posibles problemas con él. Tiene tres complementos separados para admitir las siguientes herramientas de construcción:
- SBT
- Maven
- Gradle
Tiene dos complementos separados para admitir los siguientes dos IDE:
- IntelliJ IDEA
- Eclipse IDE
¿Qué IDEs admiten el desarrollo de aplicaciones basadas en Play y Scala y cómo?
Los siguientes dos IDEs populares admiten el desarrollo de aplicaciones basadas en Play y Scala:
- IntelliJ IDEA
- Eclipse IDE
Lo admiten mediante el uso de complementos de Scala, como Eclipse IDE que tiene un IDE de Scala para Eclipse para admitir el desarrollo de aplicaciones basadas en Play y Scala. IntelliJ IDEA tiene un complemento como “Scala Plugin for IntelliJ IDEA” para admitir aplicaciones basadas en “Scala, SBT y Play 2 Framework”.- ¿Cuál es el marco de pruebas unitarias y funcionales predeterminado para Play? ¿Cuál es la herramienta de construcción predeterminada para Play? ¿Cuál es el motor de plantillas predeterminado para Play? ¿Cuál es el servidor web incorporado disponible en Play Framework?
El marco de pruebas unitarias y funcionales predeterminado de Play Framework es Spec2. Es muy fácil probar aplicaciones basadas en Play/Scala utilizando el marco Spec2. La plantilla predeterminada integrada de Play Framework es “Twirl”. Fue desarrollada en Scala. Al utilizar estas plantillas, podemos desarrollar aplicaciones basadas en Play/Scala muy fácilmente. El servidor web incorporado o predeterminado disponible para Play Framework es el servidor Netty.
¿Por qué Scala es mejor que Java? ¿Cuáles son las ventajas de Scala sobre Java (Java 8)? En comparación con Java, ¿cuáles son las principales ventajas o beneficios de Scala?
Porque Scala admite las siguientes características adicionales, es mejor que Java 8:
- Funciones de Programación Funcional Completa
- Más Lenguaje de Expresión
- Emparejamiento de Patrones
- Mejor soporte para el Modelo de Actores de Akka
- Resolución automática para el Problema del Diamante de Herencia con Rasgos
- Programación de IO Asíncrona y No Bloqueante utilizando el Marco Akka
- API de Transmisión Totalmente Reactiva
¿Qué es una Función Anónima en Scala? ¿Qué es un Literal de Función en Scala? ¿Cuáles son las ventajas de una Función Anónima/Literal en Scala?
La Función Anónima es también una Función pero no tiene ningún nombre de función. También se conoce como Función Literal. Las ventajas de una Función Anónima/Función Literal en Scala:
- Podemos asignar una Función Literal a una variable
- Podemos pasar una Función Literal a otra función/método
- Podemos devolver una Función Literal como resultado/valor de retorno de otra función/método.
¿Qué es una Función de Orden Superior (HOF)?
Una Función de Orden Superior (HOF) también es una función pero que realiza una, dos o ambas de las siguientes cosas:
- Tomar otras funciones como argumentos
- Devolver funciones como sus resultados
¿Cuáles son las diferencias entre Case class y Clase Normal?
La Case class también es una clase, sin embargo, cuando la comparamos con una clase normal, proporciona las siguientes características o beneficios adicionales:
- Por defecto, los parámetros del constructor de Case-class son ‘val’. No necesitamos declarar parámetros con ‘val’.
- Por defecto, los parámetros del constructor de Case-class se convierten en campos de clase.
- Estos métodos se añaden automáticamente: toString, equals, hashCode, copy, apply y unapply.
- Obtiene automáticamente el objeto Companion.
- No es necesario usar la palabra clave ‘new’ para crear una instancia de la Case Class.
- Fácil de usar en Pattern Matching.
Todas estas características son añadidas por el compilador de Scala en tiempo de compilación. No es posible con una clase normal.
¿Cuáles son las ventajas del stack Play/Scala para desarrollar aplicaciones web?
Las siguientes son las principales ventajas del stack Play/Scala para desarrollar aplicaciones web:
- El Play es un marco de software libre de código abierto para desarrollar aplicaciones web. Mejora la productividad del desarrollador con su función de recarga automática. Es un modelo sin estado basado en HTTP para servir solicitudes web, lo que lo hace muy fácil de desarrollar APIs REST o servicios web RESTful. Además, proporciona un manejo de errores mejorado, mostrando mensajes de error, ubicación del archivo y número de línea donde ocurrió el error. Ofrece un alto rendimiento y mejor escalabilidad gracias a su diseño reactivo y el uso de Netty server para aprovechar la E/S no bloqueante. Es fácil de extender y compatible con el desarrollo de complementos para ampliar sus características y funcionalidades. Además, tanto Scala como Play admiten la programación funcional, lo que facilita el desarrollo de aplicaciones altamente concurrentes y con mejor paralelismo, gracias a características como la inmutabilidad, funciones puras, coincidencia de patrones y el modelo de actores. Esto también promueve la reutilización, facilita las pruebas y hace que las aplicaciones sean más modulares.
¿Cuáles son las construcciones de OOP de Java que no son compatibles con Scala? ¿Cuáles son las construcciones de OOP de Scala que no son compatibles con Java? ¿Cuáles son las nuevas construcciones de OOP introducidas por Scala, pero no soportadas por Java?
Construcciones de OOP de Java que no son compatibles con Scala:
- No hay concepto de interfaz en Scala
- No hay concepto de Enum en Scala
Construcciones de OOP de Scala que no son compatibles con Java: O Las nuevas construcciones de OOP introducidas por Scala, pero no soportadas por Java:
- Traits de Scala
- Resolución automática del problema del diamante de la herencia.
¿Qué es el llamado por nombre? ¿Scala y Java admiten el llamado por nombre? ¿Cuál es la diferencia entre los parámetros de función llamados por valor y por nombre?
El llamado por nombre significa evaluar los parámetros de un método o función solo cuando los necesitamos o accedemos a ellos. Si no los usamos, entonces no los evalúa. Scala admite tanto los parámetros de función llamados por valor como los llamados por nombre. Sin embargo, Java solo admite el llamado por valor, pero no el llamado por nombre. Diferencia entre los parámetros de función llamados por valor y por nombre: La diferencia principal entre estos dos se describe a continuación:
- En el llamado por nombre, los parámetros de función se evalúan solo cuando se necesitan, pero no cuando se llama a la función.
- En el llamado por valor, los parámetros de función se evalúan cuando se llama a la función.
- En el llamado por valor, los parámetros se evalúan antes de ejecutar la función y se evalúan solo una vez, independientemente de cuántas veces los usemos en esa función.
- En el llamado por nombre, los parámetros se evalúan cada vez que accedemos a ellos y se evalúan cada vez que los usamos en esa función.
- Diferencias de sintaxis en Scala
Llamado por valor:
def myFunction(a: Int, b: Int) { }
Aquí tanto a como b son parámetros de llamada por valor para myFunction. Por nombre de llamada:
def myFunction(a: Int, b: => Int) { }
Aquí a es un parámetro de llamada por valor y b es un parámetro de llamada por nombre para myFunction.
¿Cuáles son los marcos MVC populares para el lenguaje Scala para desarrollar aplicaciones web?
Los siguientes son los marcos MVC más populares disponibles para el lenguaje Scala para desarrollar aplicaciones web:
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
¿Cuáles son las principales diferencias entre la estructura de un proyecto Maven basado en Java y un proyecto Maven basado en Scala?
La mayoría de los proyectos basados en Java utilizan Maven como su herramienta de construcción. Sin embargo, la mayoría de las personas usan SBT como herramienta de construcción para desarrollar sus aplicaciones basadas en Scala, aunque algunos equipos también utilizan Maven como herramienta de construcción para desarrollar sus aplicaciones basadas en Scala. La estructura de carpetas de Maven para proyectos basados en Java y Scala es casi la misma, con solo un cambio en el nombre de la carpeta, como se muestra en los siguientes diagramas: nombres de carpetas para Java y Scala. **Estructura de Carpetas del Proyecto Maven basado en Java:** **Estructura de Carpetas del Proyecto Maven basado en Scala:**
¿Qué es un Extractor en Scala? ¿Cuál es la diferencia entre Constructor y Extractor en Scala? ¿Cuál es el uso de Extractor en Scala?
No solo en Java y Scala, en casi todos los lenguajes de programación orientados a objetos, el Constructor se utiliza para crear (o ensamblar) un objeto o una instancia de una Clase utilizando sus parámetros (o componentes). El Extractor es bastante opuesto al Constructor. En Scala, el Extractor se utiliza para descomponer u desensamblar un objeto en sus parámetros (o componentes). En Scala, el método apply es un Constructor. Internamente, el Extractor utiliza el método unapply para descomponer un objeto en sus partes (o parámetros). En Scala, el Extractor se utiliza principalmente en el concepto de Coincidencia de Patrones. Discutiremos pronto el concepto de Coincidencia de Patrones.
¿Cuál es el uso de ‘???’ en aplicaciones basadas en Scala?
Estos tres signos de interrogación ‘???’ no son un operador ni un método en Scala. Se utilizan para marcar un método que está ‘En Progreso’, lo que significa que el desarrollador debe proporcionar la implementación para ese método. Este método está definido en la clase scala.PreDef, como se muestra a continuación:
def ??? : Nothing = throw new NotImplementedError
Si ejecutamos ese método sin proporcionar la implementación, lanzará un error ‘NotImplementedError’, como se muestra a continuación:
scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int
scala> add(10,20)
scala.NotImplementedError: an implementation is missing
Explica la principal diferencia entre List y Stream en la API de Colecciones de Scala. ¿Cómo demostramos esa diferencia? ¿Cuándo elegimos Stream?
En Scala, tanto List como Stream son parte de la API de Colecciones y funcionan de manera casi similar. Ambos son colecciones inmutables. Sin embargo, hay una diferencia principal entre List y Stream en la API de Colecciones de Scala: los elementos de List se evalúan de forma ansiosa y los elementos de Stream se evalúan de forma perezosa, lo que significa que se evalúan solo cuando accedemos a ellos.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
Aquí podemos observar que todos los elementos de List se evalúan en el momento de crear el objeto List. Sin embargo, si hacemos lo mismo con Stream, no podemos ver todos los elementos. Solo podemos ver el primer elemento evaluado y los elementos restantes se evalúan perezosamente, como se muestra a continuación:
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
Cuando queremos que una colección perezosa evalúe los elementos solo cuando los accedemos, entonces es mejor usar Stream.
¿Cuál es la diferencia entre :: y #:: en Scala? ¿Cuál es la diferencia entre ::: y #::: en Scala?
En la API de Colecciones de Scala,
- :: y ::: son métodos disponibles en la clase List.
- #:: y #::: son métodos disponibles en la clase Stream.
- En la clase List, el método :: se utiliza para agregar un elemento al principio de la 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)
- En la clase List, el método ::: se utiliza para concatenar los elementos de una lista dada al principio de esta 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)
- En la clase Stream, el método #:: se utiliza para agregar un elemento dado al principio del stream. Solo este elemento recién agregado es evaluado y seguido por los elementos del stream evaluados perezosamente.
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, ?)
- En la clase Stream, el método #::: se utiliza para concatenar un stream dado al principio del stream. Solo este elemento recién agregado es evaluado y seguido por los elementos del stream evaluados perezosamente.
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, ?)
- El método :: funciona como un operador cons para la clase List y el método #:: funciona como un operador cons para la clase Stream. Aquí ‘cons’ significa construir.
- ::: El método funciona como un operador de concatenación para la clase List y #::: el método funciona como un operador de concatenación para la clase Stream.
Si quiero convertirme en un desarrollador Fullstack Scala, ¿qué conjunto de tecnologías debería aprender?
Si deseas convertirte en un desarrollador Fullstack Scala, deberías aprender el siguiente conjunto de tecnologías:
- Scala 2.11.7
- Play 2.4.6 Framework
- Akka 2.3 Framework
- Una herramienta de construcción: SBT/Maven
- Un marco de JS: CoffeeScript/JavaScript
- Un IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
- Un marco de TDD y BDD: ScalaTest, Spec2, ScalaCheck, Mockito
- Microservicios con Play y Scala
- SCoverage
- Scalastyle
- Patrones de diseño de programación funcional
- Aprendizaje automático con Scala
**NOTA:** En Scala, el Extractor sigue el Patrón de Diseño Extractor. Si deseas aprenderlo en profundidad, por favor revisa mi Tutorial de Scala (La mayoría de las publicaciones siguen este patrón: Scala xxxx En Profundidad donde xxxx es un concepto como Extractor). Eso es todo sobre “Preguntas y Respuestas Avanzadas de Scala”. Discutiremos algunas preguntas y respuestas más de Scala en mis próximas publicaciones. Por favor, déjame un comentario si te gusta mi publicación o tienes algún problema/sugerencia.
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions