Bienvenido a las preguntas y respuestas de entrevistas de Scala. Hoy en día, la mayoría de las empresas en Finanzas/Banca, Gobierno, Telecomunicaciones, Redes Sociales, etc., están utilizando el Lenguaje de Programación Scala y los Marcos de Trabajo Play y Akka para desarrollar sus proyectos, ya que estos marcos admiten tanto características de Programación Orientada a Objetos como de Programación Funcional, y también ofrecen muchas ventajas.
Preguntas de Entrevista Scala
Voy a compartir mi conocimiento sobre entrevistas y mi experiencia en el desarrollo de Ecosistema Scala o Scala Fullstack (Scala/Play/Akka) a través de un par de publicaciones. Planeo compartir 3 publicaciones separadas. Algunas preguntas son únicas y otras tienen subpreguntas. En total, discutiré alrededor de 200 preguntas. Apuesto a que si estás familiarizado con todas estas preguntas, definitivamente superarás todas las entrevistas para desarrolladores Scala. Sin embargo, si deseas continuar como desarrollador Fullstack Scala, debes aprender a fondo todas estas tecnologías de Fullstack Scala.
Introducción
I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:
- Preguntas y respuestas de entrevista de Scala:
Discutiremos algunas preguntas básicas de entrevista de Scala aquí, que son útiles para recién graduados o desarrolladores de Java que desean pasar al desarrollo de Scala o tienen más de 1 año de experiencia como desarrollador de Scala.2.
Preguntas y respuestas intermedias de entrevista de Scala:- Discutiremos algunas preguntas de entrevista, que son útiles para aquellos con más de 2 años de experiencia como desarrolladores de Scala/Java.3.
Preguntas y respuestas avanzadas de entrevista de Scala:- Discutiremos algunas preguntas de entrevista, que son útiles para desarrolladores senior o experimentados de Scala/Java.4.
Preguntas y respuestas de entrevista de concurrencia y paralelismo en Scala/Java:- Discutiremos preguntas y respuestas de entrevista de concurrencia y paralelismo en Scala/Java, que son útiles para desarrolladores senior o experimentados de Scala/Java.
También discutiremos algunas diferencias entre los constructos de Scala y Java para que los usuarios (que se están moviendo de Java a Scala) puedan beneficiarse de estas publicaciones. En esta publicación, vamos a discutir algunas preguntas básicas de entrevista de Scala. Lea mis próximas publicaciones para el resto de las dos secciones.
Preguntas básicas de entrevista de Scala
En esta sección, vamos a enumerar todas las Preguntas Básicas de Entrevista en Scala y en la siguiente sección las discutiremos en detalle.
- ¿Qué es Scala? ¿Es un lenguaje o una plataforma? ¿Admite programación orientada a objetos (OOP) o programación funcional (FP)? ¿Quién es el padre de Scala?
- ¿Es Scala un lenguaje de tipo estático? ¿Qué es un lenguaje de tipo estático y qué es un lenguaje de tipo dinámico? ¿Cuál es la diferencia entre lenguajes de tipo estático y lenguajes de tipo dinámico?
- ¿Es Scala un lenguaje de programación puramente orientado a objetos? ¿Java es un lenguaje de programación puramente orientado a objetos?
- ¿Scala admite todos los conceptos de programación funcional? ¿Java 8 admite todos los conceptos de programación funcional?
- ¿Cuáles son las principales ventajas del lenguaje Scala? ¿Existen desventajas en el lenguaje Scala?
- ¿Cuál es la principal desventaja del lenguaje Scala?
- ¿Cuál es el lema principal del lenguaje Scala?
- ¿Cuáles son los lenguajes populares de la JVM disponibles actualmente?
- Al igual que la clase java.lang.Object en Java, ¿cuál es la superclase de todas las clases en Scala?
- ¿Cuál es el modificador de acceso predeterminado en Scala? ¿Scala tiene la palabra clave “public”?
- ¿Qué es la “Inferencia de Tipo” en Scala?
- Diferencia entre Int en Scala y java.lang.Integer en Java. ¿Cuál es la relación entre Int y RichInt en Scala?
- ¿Qué es Nothing en Scala? ¿Qué es Nil en Scala? ¿Cuál es la relación entre Nothing y Nil en Scala?
- ¿Qué es Null en Scala? ¿Qué es null en Scala? ¿Cuál es la diferencia entre Null y null en Scala?
- ¿Qué es Unit en Scala? ¿Cuál es la diferencia entre void en Java y Unit en Scala?
- ¿Cuál es la diferencia entre `val` y `var` en Scala?
- ¿Qué es REPL en Scala? ¿Cuál es el uso de REPL en Scala? ¿Cómo acceder a REPL de Scala desde el símbolo del sistema de CMD?
- ¿Cuáles son las características de Scala?
- ¿Cómo implementamos bucles de manera funcional? ¿Cuál es la diferencia entre bucles estilo OOP y FP?
- ¿Qué es una “Application” en Scala o qué es una aplicación Scala? ¿Qué es “App” en Scala? ¿Cuál es el uso de App en Scala?
- ¿Scala soporta la sobrecarga de operadores? ¿Java soporta la sobrecarga de operadores?
- ¿Qué es una expresión? ¿Qué es una sentencia? ¿Cuál es la diferencia entre expresión y sentencia?
- ¿Cuál es la diferencia entre el “If…Else” de Java y el “If…Else” de Scala?
- ¿Scala es un lenguaje basado en expresiones o basado en sentencias? ¿Java es un lenguaje basado en expresiones o basado en sentencias?
- ¿Menciona algunas características que son compatibles con Java pero no con Scala y viceversa?
- ¿Cuál es la diferencia entre una función y un método en Scala?
- ¿Cuántos archivos de clase públicos son posibles definir en un archivo fuente de Scala?
- Al igual que en Java, ¿cuáles son las importaciones predeterminadas en el lenguaje Scala?
- ¿Cuántos operadores hay en Scala y por qué?
- Menciona algunas palabras clave que son utilizadas por Java y no son requeridas en Scala. ¿Por qué Scala no las requiere?
- ¿Qué es PreDef en Scala?
Consulte mi publicación anterior para obtener más información sobre Programación Funcional (Haga clic en este enlace para abrir mi publicación anterior).
Preguntas y respuestas de entrevistas de Scala
En esta sección, recogeremos cada pregunta de la lista anterior y discutiremos en detalle con ejemplos adecuados (si es necesario). Si desea comprender estos conceptos en profundidad con ejemplos, consulte mis publicaciones anteriores en la sección de tutoriales de Scala.
¿Qué es Scala? ¿Es un lenguaje o una plataforma? ¿Soporta POO o PF? ¿Quién es el padre de Scala?
Scala significa SCAlable LAnguage. Martin Odersky es el padre de Scala. Scala es un lenguaje de programación multiparadigma que admite conceptos tanto de programación orientada a objetos como funcional. Fue diseñado y desarrollado por Martin Odersky. Scala es un lenguaje de programación en la JVM (Java Virtual Machine) que combina aspectos de programación funcional y orientada a objetos. Scala es un lenguaje híbrido funcional (orientado a objetos y funcional) en la JVM. Scala tiene un sistema de tipos fuerte y estático. En Scala, todos los tipos se verifican en tiempo de compilación.
¿Es Scala un lenguaje de tipado estático? ¿Qué es un lenguaje de tipado estático y qué es un lenguaje de tipado dinámico? ¿Cuál es la diferencia entre lenguajes de tipado estático y dinámico?
Sí, Scala es un lenguaje de tipado estático. Un lenguaje de tipado estático significa que la comprobación de tipos se realiza en tiempo de compilación por el compilador, no en tiempo de ejecución. La principal ventaja de este tipo de lenguajes es que como desarrolladores, debemos asegurarnos de escribir código correcto para evitar errores en tiempo de compilación. Como el compilador verifica muchos errores en tiempo de compilación, no tenemos muchos problemas o errores en tiempo de ejecución. Ejemplos: Java, Scala, C, C++, Haskell, etc. Un lenguaje de tipado dinámico significa que la comprobación de tipos se realiza en tiempo de ejecución, no en tiempo de compilación por el compilador. Como el compilador no realiza ninguna comprobación de tipos en tiempo de compilación, podemos esperar más problemas o errores en tiempo de ejecución. Ejemplo: Groovy, JavaScript, Ruby, Python, Smalltalk, etc.
¿Es Scala un lenguaje de programación puro orientado a objetos? ¿Es Java un lenguaje de programación puro orientado a objetos?
Un lenguaje de programación orientado a objetos puro significa que todo debería ser un objeto. Java no es un lenguaje de programación orientado a objetos puro porque admite los siguientes dos conceptos no orientados a objetos:
- Java admite tipos de datos primitivos. No son objetos.
- Java admite miembros estáticos. No están relacionados con objetos.
Sí, Scala es un lenguaje de programación orientado a objetos puro porque en Scala, todo es un objeto y todo es un valor. Las funciones son valores y los valores son objetos. Scala no tiene tipos de datos primitivos y tampoco tiene miembros estáticos.
¿Scala soporta todos los conceptos de Programación Funcional? ¿Java 8 soporta todos los conceptos de Programación Funcional?
Sí, Scala soporta todos los conceptos de Programación Funcional (FP). Java 8 ha introducido algunos constructos de Programación Funcional, pero NO soporta todos los conceptos de Programación Funcional. Por ejemplo, Java 8 no soporta el Matching de Patrones, el Currying de Funciones, los Implícitos, etc.
¿Cuáles son las principales ventajas del lenguaje Scala? ¿Existen inconvenientes del lenguaje Scala?
Si utilizamos el lenguaje Scala para desarrollar nuestras aplicaciones, podemos obtener los siguientes beneficios o ventajas y desventajas: Ventajas del lenguaje Scala:-
- Código Simple y Conciso
- Código Muy Expresivo
- Código Más Legible
- Lenguaje 100% Seguro en Tipos
- Inmutabilidad y Sin Efectos Secundarios
- Código Más Reutilizable
- Más Modularidad
- Haz más con menos código
- Sintaxis muy flexible
- Admite todas las características de la programación orientada a objetos
- Admite todas las características de la programación funcional. Altamente funcional
- Código menos propenso a errores
- Mejor programación paralela y de concurrencia
- Código altamente escalable y mantenible
- Alta productividad
- Aplicaciones distribuidas
- Interoperabilidad completa con Java
- Potentes DSLs de Scala disponibles
- REPL para aprender los conceptos básicos de Scala
Desventajas del lenguaje Scala:-
- Código menos legible
- Un poco difícil de entender para los principiantes
- Sintaxis compleja para aprender
- Menos compatibilidad hacia atrás
NOTA:- Podemos escribir código Scala de manera más legible o menos legible.
¿Cuál es la principal desventaja del lenguaje Scala?
Aparte de los muchos beneficios de Scala, tiene un inconveniente importante: el problema de compatibilidad hacia atrás. Si queremos actualizar a la última versión de Scala, entonces debemos ocuparnos de cambiar algunos nombres de paquetes, nombres de clases, nombres de métodos o funciones, etc. Por ejemplo, si estás utilizando una versión antigua de Scala y tu proyecto está utilizando la anotación BeanProperty, estaba disponible en “scala.reflect” como “scala.reflect.BeanProperty” en versiones antiguas. Si queremos actualizar a las nuevas versiones de Scala, entonces necesitamos cambiar este paquete de “scala.reflect” a “scala.beans”.
¿Cuál es el lema principal del lenguaje Scala?
Al igual que el lema de Java “Escribe una vez, ejecuta en cualquier lugar”, Scala tiene el lema “Hacer más con menos” o “Hacer más con menos código”. “Hacer más con menos” significa que podemos desarrollar programas o lógica más complejos con menos código.
¿Cuáles son los lenguajes populares de la JVM disponibles ahora?
Java, Scala, Groovy y Closure son los lenguajes más populares en la JVM (Java Virtual Machine). Scala, Groovy y Closure admiten tanto características de programación orientada a objetos como características de programación funcional en la JVM. Java SE 8 admite todas las características de programación orientada a objetos. Sin embargo, admite muy pocas características de programación funcional, como expresiones lambda, funciones, inferencia de tipos y funciones de orden superior.
Al igual que la clase java.lang.Object en Java, ¿cuál es la superclase de todas las clases en Scala?
Como sabemos en Java, la superclase de todas las clases (ya sean clases del API de Java o clases definidas por el usuario) es java.lang.Object. De la misma manera, en Scala, la superclase de todas las clases o rasgos es la clase “Any”. La clase Any está definida en el paquete scala como “scala.Any”.
¿Cuál es el modificador de acceso predeterminado en Scala? ¿Scala tiene la palabra clave “public”?
En Scala, si no mencionamos ningún modificador de acceso a un método, función, rasgo, objeto o clase, el modificador de acceso predeterminado es “público”. Incluso para los campos, “público” es el modificador de acceso predeterminado. Debido a esta característica predeterminada, Scala no tiene la palabra clave “public”.
¿Qué es la “Inferencia de Tipos” en Scala?
Los tipos pueden ser inferidos por el compilador de Scala en tiempo de compilación. Se conoce como “Inferencia de Tipos”. Los tipos significan el tipo de datos o el tipo de resultado. Usamos tipos en muchos lugares en los programas de Scala, como tipos de variables, tipos de objetos, tipos de parámetros de métodos/funciones, tipos de retorno de métodos/funciones, etc. En palabras simples, determinar el tipo de una variable o expresión u objeto, etc., en tiempo de compilación por el compilador se conoce como “Inferencia de Tipos”.
¿Cuáles son las similitudes y diferencias entre Int de Scala y java.lang.Integer de Java? ¿Cuál es la relación entre Int y RichInt en Scala?
Similitudes entre Int de Scala y java.lang.Integer de Java:
- Ambos son clases.
- Ambos se utilizan para representar números enteros.
- Ambos son enteros de 32 bits con signo.
Diferencias entre la clase Int de Scala y java.lang.Integer de Java:
- La clase Int de Scala no implementa la interfaz Comparable.
- La clase java.lang.Integer de Java implementa la interfaz Comparable.
El Integer de Java es algo similar al Int y RichInt de Scala. RichInt es una clase final definida en el paquete scala.runtime, como “scala.runtime.RichInt”. En Scala, la relación entre Int y RichInt es que cuando usamos Int en un programa de Scala, se convertirá automáticamente en RichInt para utilizar todos los métodos disponibles en esa clase. Podemos decir que RichInt es una clase implícita de Int. (Discutiremos “¿Qué es Implícito y las ventajas de Implícitos?” en mi próximo artículo).
¿Qué es Nothing en Scala? ¿Qué es Nil en Scala? ¿Cuál es la relación entre Nothing y Nil en Scala?
En Scala, Nothing es un Tipo (clase final). Está definido en la parte inferior del Sistema de Tipos de Scala, lo que significa que es un subtipo de cualquier cosa en Scala. No hay instancias de Nothing. Casos de Uso de Nothing en Scala: Si Nothing no tiene instancias, ¿cuándo se utiliza en aplicaciones Scala?
- Nil se define utilizando Nothing (ver a continuación para un ejemplo).
- None se define utilizando Nothing.
object None extends Option[Nothing]
- Podemos usar Nothing como tipo de retorno de métodos que nunca devuelven.
- Podemos usar Nothing como tipo de retorno de métodos que terminan de manera anormal.
Nil es un objeto que se utiliza para representar una lista vacía. Se define en el paquete “scala.collection.immutable” como se muestra a continuación:
object Nil extends List[Nothing]
Ejemplo:-
scala> Nil
res5: scala.collection.immutable.Nil.type = List()
scala> Nil.length
res6: Int = 0
¿Qué es Null en Scala? ¿Qué es null en Scala? ¿Cuál es la diferencia entre Null y null en Scala?
Null es un tipo (clase final) en Scala. El tipo Null está disponible en el paquete “scala” como “scala.Null”. Tiene una y solo una instancia, que es null. En Scala, “null” es una instancia del tipo scala.Null. Ejemplo:-
scala> val myNullRef : Null = null
myNullRef: Null = null
No podemos asignar otros valores a referencias de tipo Null. Acepta solo el valor ‘null’. Null es un subtipo de todos los tipos de referencia. Null está en la parte inferior del Sistema de Tipos de Scala. Como NO es un subtipo de los tipos de valor, podemos asignar “null” a cualquier variable de tipo valor. Ejemplo:-
scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
val myInt : Int = null
^ Aquí hay un error de tipo incompatible. encontrado: Null (null) pero requerido: Int. Las conversiones implícitas entre Null e Int no son aplicables porque son ambiguas.
¿Qué es Unit en Scala? ¿Cuál es la diferencia entre void en Java y Unit en Scala?
En Scala, Unit se utiliza para representar “Sin valor” o “Sin valor útil”. Unit es una clase final definida en el paquete “scala” que es “scala.Unit”. Unit es algo similar a void en Java. Pero tienen algunas diferencias.
- void en Java no tiene ningún valor. No es nada.
- Unit en Scala tiene un valor ()
- () es el único valor del tipo Unit en Scala. Sin embargo, no hay valores del tipo void en Java.
- void en Java es una palabra clave. Unit en Scala es una clase final.
Ambos se utilizan para representar que un método o función no devuelve nada.
¿Cuál es la diferencia entre val y var en Scala?
En Scala, tanto val como var se utilizan para definir variables. Sin embargo, tienen algunas diferencias significativas.
- var significa variable.
- val significa valor.
- Como sabemos, variable significa variable y valor significa constante.
- var se utiliza para definir variables mutables, lo que significa que podemos reasignar valores una vez que se haya creado.
- val se utiliza para definir variables inmutables, lo que significa que no podemos reasignar valores una vez que se haya creado.
- En términos simples de Java, var significa ‘variable’ y val significa ‘variable final’.
¿Qué es REPL en Scala? ¿Cuál es el uso de REPL en Scala? ¿Cómo se accede a REPL en Scala desde el símbolo del sistema?
REPL significa Read-Evaluate-Print Loop. Se puede pronunciar como ‘ripple’. En Scala, REPL actúa como un intérprete para ejecutar código Scala desde el símbolo del sistema. Es por eso que REPL también se conoce como Interfaz de Línea de Comando de Scala (CLI) o shell de línea de comandos de Scala. El propósito principal de REPL es desarrollar y probar pequeños fragmentos de código Scala con fines prácticos. Es muy útil para principiantes en Scala practicar programas básicos. Podemos acceder a REPL usando el comando “scala”. Cuando escribimos el comando “scala” en el símbolo del sistema, obtendremos un shell REPL donde podemos escribir y ejecutar código Scala.
D:\> scala
scala>
¿Cuáles son las características de Scala?
El lenguaje Scala admite las siguientes características:
- Admite tanto el estilo de programación orientado a objetos (estilo imperativo) como el estilo de programación funcional
- Lenguaje de programación puramente orientado a objetos
- Admite todas las características funcionales
- Intérprete REPL (Read-Evaluate-Print Loop)
- Sistema de tipos fuerte
- Lenguaje de tipado estático
- Inferencia de tipos
- Admite la coincidencia de patrones
- Admite cierres
- Admite estructuras de datos persistentes
- Utiliza el modelo de actores para desarrollar aplicaciones concurrentes
- Interoperable con Java
- Disponible en todas las herramientas de desarrollo: IDEs, herramientas de construcción, marcos web, marcos de TDD y BDD
¿Cómo implementamos bucles de manera funcional? ¿Cuál es la diferencia entre los bucles en el estilo OOP y FP?
Sabemos cómo implementar bucles en el estilo orientado a objetos: usando variables temporales mutables, actualizando el valor de la variable y utilizando constructos de bucle. Es un enfoque muy tedioso y poco seguro. No es seguro en entornos multi-hilo. El estilo orientado a objetos utiliza los siguientes constructos para implementar bucles:
- Constructos de bucle
- Mutabilidad
- Efectos secundarios
Podemos implementar bucles de la misma manera de manera funcional. Es seguro para hilos. Podemos usar las siguientes dos técnicas para implementar bucles en estilo funcional:
- Recursividad
- Recursividad de cola
- Inmutabilidad
- Sin efectos secundarios
¿Qué es una “Application” en Scala o qué es Scala Application? ¿Qué es “App” en Scala? ¿Cuál es el uso de App en Scala?
Scala Application: En Scala, App es un rasgo definido en el paquete scala como “scala.App”. Define el método principal. Si un objeto o una clase extiende este rasgo, se convertirán automáticamente en programas ejecutables de Scala porque heredarán el método principal de Application. La principal ventaja de usar App es que no necesitamos escribir el método principal. El principal inconveniente de usar App es que debemos usar el mismo nombre “args” para referirnos al argumento de línea de comandos porque el método main() de scala.App utiliza este nombre. Ejemplo:- Sin Scala App:
object MyApp {
def main( args: Array[String]){
println("Hello World!")
}
}
Con Scala App:
object MyApp extends App{
println("Hello World!")
}
Si observamos los dos ejemplos anteriores, en el segundo ejemplo no hemos definido el método principal porque hemos heredado de Scala App (Application). Antes de Scala 2.9, teníamos el rasgo scala.Application. Pero fue deprecado por scala.App desde la versión Scala 2.9.
¿Scala admite la sobrecarga de operadores? ¿Java admite la sobrecarga de operadores?
Java no admite la sobrecarga de operadores. Scala sí admite la sobrecarga de operadores. La razón es que Java no quiere admitir algunos nombres de métodos engañosos como “+*/”. Scala ha dado esta flexibilidad al desarrollador para decidir qué nombres de métodos/de funciones deben usarse. Cuando llamamos a 2 + 3, eso significa que ‘+’ no es un operador, es un método disponible en la clase Int (o en su tipo implícito). Internamente, esta llamada se convierte en “2.+(3)“.
¿Qué es una expresión? ¿Qué es una declaración? ¿Cuál es la diferencia entre una expresión y una declaración?
Expresión: Una expresión es un valor que significa que se evaluará a un valor. Como una expresión devuelve un valor, podemos asignarla a una variable. Ejemplo: – La condición “if” de Scala, el operador ternario de Java. Declaración: Una declaración define una o más acciones u operaciones. Eso significa que la declaración realiza acciones. Como no devuelve un valor, no podemos asignarla a una variable. Ejemplo: – La condición “if” de Java.
¿Cuál es la diferencia entre el “If…Else” de Java y el “If…Else” de Scala?
“If…Else” de Java: En Java, “If…Else” es una declaración, no una expresión. No devuelve un valor y no podemos asignarlo a una variable. Ejemplo: –
int year;
if( count == 0)
year = 2014;
else
year = 2015;
“If…Else” de Scala: En Scala, “If…Else” es una expresión. Evalúa un valor, es decir, devuelve un valor. Podemos asignarlo a una variable.
val year = if( count == 0) 2014 else 2015
**NOTA: -**El “If…Else” de Scala funciona como el operador ternario de Java. Podemos usar el “If…Else” de Scala como la declaración “If…Else” de Java como se muestra a continuación:
val year = 0
if( count == 0)
year = 2014
else
year = 2015
¿Es Scala un lenguaje basado en expresiones o un lenguaje basado en instrucciones? ¿Es Java un lenguaje basado en expresiones o un lenguaje basado en instrucciones?
En Scala, todo es un valor. Todas las expresiones o instrucciones se evalúan a un valor. Podemos asignar una expresión, función, cierre, objeto, etc., a una variable. Por lo tanto, Scala es un lenguaje orientado a expresiones. En Java, las instrucciones no son expresiones o valores. No podemos asignarlas a una variable. Por lo tanto, Java no es un lenguaje orientado a expresiones. Es un lenguaje basado en instrucciones.
¿Puedes decirme algunas características que son compatibles con Java pero no con Scala y viceversa?
- Java no admite la sobrecarga de operadores, pero Scala sí la admite.
- Java admite los operadores ++ y –, pero Scala no los admite.
- Java tiene excepciones comprobadas y no comprobadas, pero Scala no tiene excepciones comprobadas.
- Scala no admite las declaraciones break y continue, pero Java las utiliza.
- Scala no tiene conversión de tipo explícita, pero Java admite esta característica.
- Scala admite la coincidencia de patrones, pero Java no.
- Java utiliza tipos de datos primitivos, pero Scala no los tiene.
- Java admite miembros estáticos, pero Scala no tiene el concepto de miembros estáticos.
- Scala admite implícitos y rasgos, Java no los admite.
**NOTA:** Esta lista va más allá de una página. Sin embargo, estos son algunos puntos importantes para recordar sobre las diferencias en las características de Scala y Java al enfrentar entrevistas de Scala.
¿Cuál es la diferencia entre una Función y un Método en Scala?
Scala admite tanto funciones como métodos. Utilizamos la misma sintaxis para definir funciones y métodos, no hay diferencia de sintaxis. Sin embargo, tienen una diferencia menor:
- Podemos definir un método en una clase o rasgo Scala. El método está asociado con un objeto (una instancia de una clase). Podemos llamar a un método utilizando una instancia de una clase. No podemos usar un Método Scala directamente sin usar un objeto.
- La función no está asociada con una clase o rasgo. Se define en un paquete Scala. Podemos acceder a las funciones sin usar objetos, como los Métodos Estáticos de Java.
NOTA:- Hablaremos sobre Clase, Rasgo, Paquete, Objeto, etc. en mis próximas publicaciones.
¿Cuántos archivos de clase públicos son posibles de definir en un archivo fuente de Scala?
En Java, podemos definir como máximo una clase/interfaz pública en un archivo fuente. A diferencia de Java, Scala admite múltiples clases públicas en el mismo archivo fuente. Podemos definir cualquier cantidad de clases/interfaz públicas/rasgos en un archivo fuente de Scala.
Al igual que en Java, ¿cuáles son las importaciones predeterminadas en el lenguaje Scala?
Sabemos que java.lang es el paquete predeterminado importado automáticamente en todos los programas Java por la JVM. No es necesario importar este paquete explícitamente. De manera similar, las siguientes son las importaciones predeterminadas disponibles en todos los programas Scala:
- Paquete java.lang
- Paquete scala
- scala.PreDef
¿Cuántos operadores hay en Scala y por qué?
A diferencia de Java y al igual que C++, Scala admite la sobrecarga de operadores. Scala tiene un único operador que es el operador “=” (igual). Aparte de este, todos son métodos solamente. Por ejemplo, en “2 + 3”, aquí “+” no es un operador en Scala. “+” es un método disponible en la clase Int. El compilador de Scala observa que 2 y 3 son enteros e intenta encontrar ese método “+” en la clase Int. Entonces, el compilador de Scala convierte la expresión “2 + 3” en “2.+(3)” y hace una llamada al método “+” en el objeto entero “2” y pasa el objeto entero “3” como parámetro al método “+”. Tanto “2 + 3” como “2.+(3)” son iguales. Es simplemente azúcar sintáctica de Scala para escribir programas en estilo funcional.
Menciona algunas palabras clave que son utilizadas por Java y no son necesarias en Scala. ¿Por qué Scala no las requiere?
Java utiliza extensivamente las siguientes palabras clave:
- Palabra clave ‘public’ – para definir clases, interfaces, variables, etc.
- Palabra clave ‘static’ – para definir miembros estáticos.
Scala no requiere estas dos palabras clave. Scala no tiene las palabras clave ‘public’ y ‘static’.
- En Scala, el modificador de acceso predeterminado es ‘public’ para clases, traits, métodos/funciones, campos, etc. Por eso, no se necesita la palabra clave ‘public’.
- Para respaldar los principios de POO, el equipo de Scala ha evitado la palabra clave ‘static’. Por eso, Scala es un lenguaje de programación puramente orientado a objetos. Es muy difícil manejar miembros estáticos en aplicaciones de concurrencia.
¿Qué es PreDef en Scala? ¿Cuál es el propósito principal de PreDef en Scala?
En Scala, PreDef es un objeto definido en el paquete scala como “scala.PreDef”. Es un objeto de utilidad que define muchos métodos de utilidad como se muestra a continuación:
- IO de consola (print, println, etc.)
- Métodos de utilidad de colecciones
- Métodos de utilidad de cadenas
- Métodos de conversión implícita
- Métodos de utilidad de aserción, etc.
Por ejemplo, los métodos print, println, readLine, readInt, require, etc. están definidos en el objeto PreDef. En Scala, PreDef está disponible para usar sus métodos sin importar en todos los programas de Scala porque el compilador de Scala importa automáticamente este objeto en todas las unidades de compilación, como Clase, Objeto, Trait, etc. Eso es todo sobre “Preguntas y respuestas básicas de entrevista en Scala”. Discutiremos algunas preguntas y respuestas de entrevistas en Scala de nivel intermedio, avanzado y en tiempo real en mis próximas publicaciones. Por favor, déjame un comentario si te gusta mi publicación o si tienes algún problema/sugerencia.
Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers