Kotlin : dans le mille ou à côté de la plaque ?
\nKotlin n'est pas simplement « Java sans code passe-partout ». C'est un langage qui a conquis le cœur de Google, a dépassé Swift en termes de croissance et est devenu un incontournable dans les offres d'emploi pour développeurs mobiles. Mais voici le paradoxe : beaucoup arrivent à l'entretien en pensant « je connais Java, je vais me débrouiller », et repartent les yeux rouges. Parce que Kotlin est un autre monde : sans null, avec des coroutines et des fonctions d'extension qui brisent les schémas.
\nChez PythonLib (oui, nous sommes spécialisés Python, mais Kotlin est un must-have pour le backend moderne et le mobile), nous avons rassemblé un cas concret : comment réussir un entretien Kotlin avec brio. Pas de blabla – seulement du code, de la logique et des astuces secrètes dont on ne parle pas dans les formations.
\n\n1. Pourquoi Kotlin n'est pas « simplement Java 2.0 » ?
\nLa première question qu'on vous posera : « Quelle est la différence fondamentale entre Kotlin et Java ? ». Si vous répondez « la syntaxe est plus courte », on vous priera poliment de sortir. La différence principale est la null safety au niveau des types. En Java, vous pouvez oublier de vérifier si un objet est null et obtenir une NPE à l'exécution. En Kotlin, le compilateur ne vous laissera même pas compiler le code s'il y a un risque de null.
\n// Java\nString name = null;\nint length = name.length(); // NPE à l'exécution\n\n// Kotlin\nvar name: String? = null\nval length = name?.length ?: 0 // Sécurisé : length = 0\nMais c'est la base. L'intervieweur creusera plus profond : il vous demandera !! (assertion non-null), l'opérateur Elvis ?: et les appels sécurisés ?.. Votre objectif est de montrer que vous comprenez : !! est un mal, et ?: est votre ami.
- \n
- Appel sécurisé (?.) – si l'objet est null, retourne null. \n
- Elvis (?:) – si la valeur de gauche est null, on prend celle de droite. \n
- !! – à utiliser seulement si vous êtes sûr à 100%, sinon c'est un bug. \n
2. Extension functions : la magie à expliquer
\nQuestion : « Comment ajouter une méthode à une classe que vous ne pouvez pas modifier ? ». En Java – pattern Decorator ou classe Util. En Kotlin – extension functions. Ce n'est pas une modification réelle de la classe, mais du sucre syntaxique qui rend le code lisible.
\n// Extension function pour String\nfun String.isEmail(): Boolean {\n return this.contains("@") && this.contains(".")\n}\n\n// Utilisation\nval email = "user@pythonlib.ru"\nprintln(email.isEmail()) // true\nL'intervieweur peut demander : « Peut-on redéfinir une extension function ? ». Réponse : non, c'est un appel statique, pas dynamique. Si vous déclarez une fonction avec le même nom dans la classe, la méthode de la classe a la priorité.
\n\n3. Sealed class vs Enum : quand utiliser quoi ?
\nC'est une question classique pour le niveau intermédiaire. Enum – pour un ensemble fixe de constantes (jours de la semaine, statuts). Sealed class – pour une hiérarchie de types limitée, où chaque élément peut avoir son propre état.
\nsealed class Result {\n data class Success(val data: String) : Result()\n data class Error(val code: Int, val message: String) : Result()\n object Loading : Result()\n}\n\nfun handleResult(result: Result) {\n when (result) {\n is Result.Success -> println("Data: ${result.data}")\n is Result.Error -> println("Error ${result.code}: ${result.message}")\n Result.Loading -> println("Loading...")\n }\n}\nPourquoi est-ce important ? Parce que when avec sealed class garantit que vous avez traité tous les cas. Le compilateur ne vous laissera pas oublier un nouveau type si vous l'ajoutez à la sealed class.
4. Coroutines : comment ne pas échouer dans l'asynchrone
\nLe sujet sur lequel 70% des candidats échouent. Les coroutines ne sont pas des threads. Ce sont des « fils » légers qui peuvent se suspendre sans bloquer le thread.
\nsuspend fun fetchData(): String {\n delay(1000) // Ne bloque pas le thread !\n return "Data from PythonLib"\n}\n\nfun main() = runBlocking {\n launch {\n val result = fetchData()\n