Preguntas de entrevista de Kotlin

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.

  1. ¿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.

  2. ¿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 un var 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
      
  3. ¿Cuál es la diferencia entre la declaración de val y var? ¿Cómo convertir un String a un Int?

    val son variables que no pueden cambiarse, similares a los modificadores finales en Java. Una var 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.

  4. ¿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"
    

  5. ¿Qué es un const? ¿En qué se diferencia de un val?

    Por defecto, las propiedades val se establecen en tiempo de ejecución. Agregar un modificador const en un val lo convertiría en una constante en tiempo de compilación. Un const no se puede usar con un var o por sí solo. Un const no es aplicable en una variable local.

  6. ¿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.

  7. ¿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 de Array<String> se utilizan para recuperar los argumentos de la línea de comandos.

  8. ¿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 lambda let 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.

  9. ¿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.

  10. ¿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.
  1. Enumera los modificadores de visibilidad disponibles en Kotlin. ¿Cuál es el modificador de visibilidad predeterminado?

-   public
-   internal
-   protected
-   private

`public` is the default visibility modifier.
  1. ¿Compila la siguiente estructura de herencia?

```
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(){

}
```
  1. ¿Cuáles son los tipos de constructores en Kotlin? ¿En qué se diferencian? ¿Cómo se definen en tu clase?

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
}

}
```
  1. ¿Qué es el bloque init en Kotlin?

`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.
  1. ¿Cómo funciona la interpolación de cadenas en Kotlin? ¿Podrías explicarlo con un fragmento de código?

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.
  1. ¿Cuál es el tipo de argumentos dentro de un constructor?

By default, the constructor arguments are `val` unless explicitly set to `var`.
  1. ¿’new’ es una palabra clave en Kotlin? ¿Cómo instanciarías un objeto de clase en Kotlin?

**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()
```
  1. ¿Cuál es el equivalente de la expresión switch en Kotlin? ¿En qué se diferencia de switch?

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.
  1. ¿Qué son las clases de datos en Kotlin? ¿Qué los hace tan útiles? ¿Cómo se definen?

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. [![kotlin interview questions data classes](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-data-classes.png)](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-data-classes.png)
  1. ¿Qué son las declaraciones de desestructuración en Kotlin? Explícalo con un ejemplo.

Destructuring Declarations is a smart way to assign multiple values to variables from data stored in objects/arrays. [![kotlin interview questions destructuring declarations](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-destructuring-declarations.png)](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.
  1. ¿Cuál es la diferencia entre las funciones inline e infix? Proporciona un ejemplo de cada una.

[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. [![kotlin interview questions inline functions](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-inline-functions.png)](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. [![kotlin interview questions infix notations](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-infix-notations.png)](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2018/04/kotlin-interview-questions-infix-notations.png)
  1. ¿Cuál es la diferencia entre lazy y lateinit?

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
```
  1. ¿Cómo crear clases Singleton?

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.
  1. ¿Kotlin tiene la palabra clave static? ¿Cómo crear métodos estáticos en Kotlin?

**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()`.
  1. ¿Cuál es el tipo de Array siguiente?

```
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