Kotlin es el último lenguaje de programación de la JVM de JetBrains. Google lo ha convertido en el lenguaje oficial para el desarrollo de Android junto con Java. Los desarrolladores dicen que aborda los problemas que se enfrentan en la programación en Java. He escrito muchos tutoriales de Kotlin y aquí estoy proporcionando preguntas importantes para entrevistas de Kotlin.
Preguntas de Entrevista de Kotlin
Aquí estoy proporcionando preguntas y respuestas de entrevista de Kotlin que te ayudarán en tus entrevistas de Kotlin. Estas preguntas de entrevista de Kotlin son buenas tanto para principiantes como para programadores experimentados. También hay preguntas de codificación para repasar tus habilidades de codificación.
-
¿Cuál es la Plataforma Objetivo de Kotlin? ¿Cómo es posible la interoperabilidad entre Kotlin y Java?
La Máquina Virtual de Java (JVM) es la Plataforma Objetivo de Kotlin. Kotlin es 100% interoperable con Java ya que ambos, al compilarse, producen bytecode. Por lo tanto, el código de Kotlin puede ser llamado desde Java y viceversa.
-
¿Cómo se declaran variables en Kotlin? ¿En qué se diferencia la declaración de la contraparte en Java?
Hay dos diferencias principales entre la declaración de variables en Java y Kotlin:
-
Tipo de declaración En Java la declaración se ve así:
String s = "Java String"; int x = 10;
En Kotlin la declaración se ve así:
val s: String = "Hi" var x = 5
En Kotlin, la declaración comienza con un
val
y unvar
seguido por el tipo opcional. Kotlin puede detectar automáticamente el tipo usando inferencia de tipos. -
Valor por defecto Lo siguiente es posible en Java:
String s:
La siguiente declaración de variable en Kotlin no es válida.
val s: String
-
-
¿Cuál es la diferencia entre la declaración de
val
yvar
? ¿Cómo convertir un String a un Int?val
son variables que no pueden cambiarse, similares a los modificadores finales en Java. Unavar
puede reasignarse, pero el valor reasignado debe ser del mismo tipo de datos.fun main(args: Array<String>) { val s: String = "Hola" var x = 5 x = "6".toInt() }
Usamos el método
toInt()
para convertir el String a un Int. -
¿Qué es la seguridad nula y los tipos anulables en Kotlin? ¿Qué es el operador Elvis?
Kotlin pone mucho énfasis en la seguridad nula, que es un enfoque para prevenir las temidas excepciones de puntero nulo mediante el uso de tipos anulables como
String?
,Int?
,Float?
, etc. Estos actúan como un tipo de envoltura y pueden contener valores nulos. Un valor anulable no se puede agregar a otro valor anulable o tipo básico. Para recuperar los tipos básicos, necesitamos usar llamadas seguras que desempaquen los tipos anulables. Si al desempaquetar el valor es nulo, podemos optar por ignorarlo o usar un valor predeterminado en su lugar. El operador Elvis se utiliza para desempaquetar de forma segura el valor del tipo anulable. Se representa como?:
sobre el tipo anulable. El valor del lado derecho se usaría si el tipo anulable contiene un nulo.var str: String? = "JournalDev.com" var newStr = str?: "Valor Predeterminado" str = null newStr = str?: "Valor Predeterminado"
-
¿Qué es un
const
? ¿En qué se diferencia de unval
?Por defecto, las propiedades
val
se establecen en tiempo de ejecución. Agregar un modificador const en unval
lo convertiría en una constante en tiempo de compilación. Unconst
no se puede usar con unvar
o por sí solo. Unconst
no es aplicable en una variable local. -
¿Kotlin nos permite usar tipos primitivos como int, float, double?
En el nivel del lenguaje, no podemos usar los tipos mencionados anteriormente. Pero el bytecode de la JVM que se compila ciertamente los tiene.
-
¿Cuál es el punto de entrada de cada programa Kotlin?
La función
main
es el punto de entrada de cada programa Kotlin. En Kotlin podemos optar por no escribir la función principal dentro de la clase. Al compilar, la JVM encapsula implícitamente la función en una clase. Las cadenas pasadas en forma deArray<String>
se utilizan para recuperar los argumentos de la línea de comandos. -
¿Cómo es
!!
diferente de ?. en el desempaquetado de valores nulos? ¿Hay alguna otra forma de desempaquetar valores nulos de manera segura?!!
se utiliza para forzar el desempaquetado del tipo nullable y obtener el valor. Si el valor devuelto es nulo, esto llevaría a un fallo en tiempo de ejecución. Por lo tanto, el operador!!
debe usarse solo cuando estés absolutamente seguro de que el valor no será nulo en absoluto. De lo contrario, obtendrás la temida excepción de puntero nulo. Por otro lado, ?. es un operador Elvis que realiza una llamada segura. Podemos usar la expresión lambdalet
en el valor nullable para desempaquetar de manera segura como se muestra a continuación.Aquí, la expresión let realiza una llamada segura para desempaquetar el tipo nullable.
-
¿Cómo se declara una función? ¿Por qué se conocen las funciones de Kotlin como funciones de nivel superior?
fun sumaDe(a: Int, b: Int): Int{ return a + b }
El tipo de retorno de una función se define después de los
:
. Las funciones en Kotlin pueden declararse en la raíz del archivo Kotlin. -
¿Cuál es la diferencia entre los operadores == y === en Kotlin?
\== is used to compare the values are equal or not. === is used to check if the references are equal or not.
- public
- internal
- protected
- private
`public` is the default visibility modifier.
```
class A{
}
class B : A(){
}
```
**NO**. By default classes are final in Kotlin. To make them non-final, you need to add the `open` modifier.
```
open class A{
}
class B : A(){
}
```
Constructors in Kotlin are of two types: **Primary** - These are defined in the class headers. They cannot hold any logic. There's only one primary constructor per class. **Secondary** - They're defined in the class body. They must delegate to the primary constructor if it exists. They can hold logic. There can be more than one secondary constructors.
```
class User(name: String, isAdmin: Boolean){
constructor(name: String, isAdmin: Boolean, age: Int) :this(name, isAdmin)
{
this.age = age
}
}
```
`init` is the initialiser block in Kotlin. It's executed once the primary constructor is instantiated. If you invoke a secondary constructor, then it works after the primary one as it is composed in the chain.
String interpolation is used to evaluate string templates. We use the symbol $ to add variables inside a string.
```
val name = "Journaldev.com"
val desc = "$name now has Kotlin Interview Questions too. ${name.length}"
```
Using `{}` we can compute an expression too.
By default, the constructor arguments are `val` unless explicitly set to `var`.
**NO**. Unlike Java, in Kotlin, new isn't a keyword. We can instantiate a class in the following way:
```
class A
var a = A()
val new = A()
```
when is the equivalent of `switch` in `Kotlin`. The default statement in a when is represented using the else statement.
```
var num = 10
when (num) {
0..4 -> print("value is 0")
5 -> print("value is 5")
else -> {
print("value is in neither of the above.")
}
}
```
`when` statments have a default break statement in them.
In Java, to create a class that stores data, you need to set the variables, the getters and the setters, override the `toString()`, `hash()` and `copy()` functions. In Kotlin you just need to add the `data` keyword on the class and all of the above would automatically be created under the hood.
```
data class Book(var name: String, var authorName: String)
fun main(args: Array<String>) {
val book = Book("Kotlin Tutorials","Anupam")
}
```
Thus, data classes saves us with lot of code. It creates component functions such as `component1()`.. `componentN()` for each of the variables. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-data-classes.png)
Destructuring Declarations is a smart way to assign multiple values to variables from data stored in objects/arrays. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-destructuring-declarations.png) Within paratheses, we've set the variable declarations. Under the hood, destructuring declarations create component functions for each of the class variables.
[Inline functions](/community/tutorials/kotlin-inline-function-reified) are used to save us memory overhead by preventing object allocations for the anonymous functions/lambda expressions called. Instead, it provides that functions body to the function that calls it at runtime. This increases the bytecode size slightly but saves us a lot of memory. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-inline-functions.png) [infix functions](/community/tutorials/kotlin-functions) on the other are used to call functions without parentheses or brackets. Doing so, the code looks much more like a natural language. [](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-infix-notations.png)
Both are used to delay the property initializations in Kotlin `lateinit` is a modifier used with var and is used to set the value to the var at a later point. `lazy` is a method or rather say lambda expression. It's set on a val only. The val would be created at runtime when it's required.
```
val x: Int by lazy { 10 }
lateinit var y: String
```
To use the singleton pattern for our class we must use the keyword `object`
```
object MySingletonClass
```
An `object` cannot have a constructor set. We can use the init block inside it though.
**NO**. Kotlin doesn't have the static keyword. To create static method in our class we use the `companion object`. Following is the Java code:
```
class A {
public static int returnMe() { return 5; }
}
```
The equivalent Kotlin code would look like this:
```
class A {
companion object {
fun a() : Int = 5
}
}
```
To invoke this we simply do: `A.a()`.
```
val arr = arrayOf(1, 2, 3);
```
The type is Array<Int>.
Eso es todo para las preguntas y respuestas de entrevista sobre Kotlin.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-interview-questions