Comment réussir un entretien Kotlin : les meilleures questions de A à Z
\n\nUn entretien Kotlin ne se résume pas à une simple vérification de la syntaxe. Les employeurs veulent voir que vous comprenez la philosophie du langage : la sécurité nulle, le style fonctionnel, les idiomes et les particularités de compilation. Dans cet article, nous avons analysé les questions les plus fréquentes – des bases au niveau avancé. Préparez-vous à 100% pour l'entretien.
\n\n1. Questions de base : syntaxe et null safety
\n\nL'entretien commence généralement par les fondamentaux. Voici ce qu'il faut absolument savoir.
\n\nQuels sont les types de données en Kotlin et en quoi diffèrent-ils de Java ?
\nKotlin est un langage statiquement typé. Tous les types sont des objets, il n'y a pas de primitifs (mais le compilateur peut optimiser). Les types principaux : Int, Double, Boolean, String, Array. Contrairement à Java, Kotlin n'utilise pas new pour créer des objets, et les types nullable sont explicitement marqués par le signe ?.
Qu'est-ce que la null safety et comment Kotlin l'implémente-t-il ?
\nLa null safety est une protection intégrée contre les NullPointerException. Les types sont divisés en nullable (String?) et non-null (String). Pour un accès sécurisé, utilisez les opérateurs :
val name: String? = null\nprintln(name?.length) // appel sécurisé -> null\nprintln(name?.length ?: 0) // opérateur Elvis -> 0\nprintln(name!!.length) // forçage -> NPE si null\n\nQuelle est la différence entre val et var ?
\n- \n
val— référence immuable (lecture seule). Équivalent definalen Java. \nvar— référence mutable. \n
Important : val ne garantit pas l'immuabilité de l'objet lui-même, seulement de la référence.
2. Constructions avancées : classes, fonctions et sealed
\n\nIci, on teste votre capacité à écrire un code concis et sécurisé.
\n\nQu'est-ce qu'une data class et quelles méthodes génère-t-elle ?
\ndata class est une classe conçue pour stocker des données. Le compilateur génère automatiquement : equals(), hashCode(), toString(), copy(), et componentN().
data class User(val id: Int, val name: String)\nval user = User(1, "Alice")\nval copy = user.copy(name = "Bob")\nprintln(user) // User(id=1, name=Alice)\n\nQu'est-ce qu'une sealed class et quand l'utiliser ?
\nsealed class est une hiérarchie de classes restreinte. Toutes les sous-classes doivent être déclarées dans le même fichier. Idéal pour représenter des états (par exemple, le résultat d'un chargement).
sealed class Result {\n data class Success(val data: String) : Result()\n data class Error(val message: String) : Result()\n object Loading : Result()\n}\n\nfun handle(result: Result) = when (result) {\n is Result.Success -> println(result.data)\n is Result.Error -> println(result.message)\n Result.Loading -> println("Loading...")\n}\nAvantage : when doit être exhaustif – le compilateur vérifie toutes les variantes.
Que sont les extension functions et comment fonctionnent-elles ?
\nLes extension functions permettent d'ajouter une nouvelle méthode à une classe existante sans héritage. En réalité, ce sont des fonctions statiques qui prennent une instance de la classe comme premier argument.
\nfun String.isEmail(): Boolean = this.contains("@")\nprintln("test@mail.ru".isEmail()) // true\n\n3. Programmation fonctionnelle : lambdas, collections, portées
\n\nKotlin utilise activement l'approche fonctionnelle. Soyez prêt pour les questions sur le travail avec les collections et les fonctions de portée.
\n\nQuelles fonctions de portée connaissez-vous ? Quelles sont leurs différences ?
\nLes principales : let, run, with, apply, also. La principale différence réside dans le contexte (this ou it) et la valeur de retour.