Kotlin : L'arme secrète pour la magie multiplateforme

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Kotlin n'est pas seulement pour Android ?

\n\n

Si vous pensez encore que Kotlin est simplement un "Java amélioré" pour Android, vous passez à côté de l'essentiel. Dans un monde où tout le monde veut écrire un seul code et l'exécuter partout, Kotlin Multiplatform (KMP) devient un véritable "tueur" de frameworks comme Flutter et React Native. Mais contrairement à eux, Kotlin ne vous oblige pas à abandonner l'UI native ou à apprendre JavaScript.

\n\n

Imaginez : vous écrivez la logique métier, les requêtes réseau et le travail avec la base de données une seule fois en Kotlin. Ensuite, vous utilisez ce code sur Android, iOS, sur le web et même sur le serveur (Ktor). Cela semble fantastique ? Bienvenue dans la réalité du développement multiplateforme avec Kotlin.

\n\n

Dans cet article, nous ne nous contenterons pas de parler de théorie. Nous montrerons des exemples de code réels, comparerons KMP à ses concurrents et vous donnerons un plan étape par étape pour commencer dès aujourd'hui.

\n\n

Qu'est-ce que Kotlin Multiplatform (KMP) et pourquoi en avez-vous besoin ?

\n\n

KMP n'est pas un framework. C'est une technologie de compilation intégrée au langage Kotlin. Elle permet de compiler du code commun (common code) vers différentes plateformes :

\n\n
    \n
  • Android — bytecode JVM (comme d'habitude).
  • \n
  • iOS — binaire natif (via LLVM).
  • \n
  • JavaScript/Web — code JS pour le navigateur.
  • \n
  • Native (Linux, Windows, macOS) — via Kotlin/Native.
  • \n
\n\n

La particularité principale : vous écrivez expect/actual — vous déclarez une API attendue dans le code commun, et vous l'implémentez séparément pour chaque plateforme. Tout le reste est commun.

\n\n

Exemple 1 : Module commun pour les requêtes réseau

\n\n

Écrivons un simple client HTTP qui fonctionnera sur Android et iOS. Pour cela, utilisons Ktor — un client écrit en Kotlin.

\n\n

Étape 1 : Structure du projet (Gradle)

\n\n

Dans le fichier build.gradle.kts de votre module commun :

\n\n
plugins {\n    kotlin("multiplatform")\n    id("io.ktor.plugin") version "2.3.7"\n}\n\nkotlin {\n    androidTarget()\n    iosX64()\n    iosArm64()\n    iosSimulatorArm64()\n\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation("io.ktor:ktor-client-core:2.3.7")\n                implementation("io.ktor:ktor-client-content-negotiation:2.3.7")\n                implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n            }\n        }\n        val androidMain by getting {\n            dependencies {\n                implementation("io.ktor:ktor-client-android:2.3.7")\n            }\n        }\n        val iosMain by creating {\n            dependsOn(commonMain)\n            dependencies {\n                implementation("io.ktor:ktor-client-darwin:2.3.7")\n            }\n        }\n    }\n}
\n\n

Étape 2 : Code commun (commonMain)

\n\n

Créons une data class et un client API :

\n\n
// commonMain/kotlin/com/example/User.kt\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n    val id: Int,\n    val name: String,\n    val email: String\n)\n\n// commonMain/kotlin/com/example/ApiClient.kt\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.plugins.contentnegotiation.*\nimport io.ktor.client.request.*\nimport io.ktor.serialization.kotlinx.json.*\n\nclass ApiClient {\n    private val client = HttpClient {\n        install(ContentNegotiation) {\n            json()\n        }\n    }\n\n    suspend fun fetchUser(id: Int): User {\n        return client.get("https://jsonplaceholder.typicode.com/users/$id").body()\n    }\n}
\n\n

Vous voyez ? Pas de if, pas de vérifications de plateforme. Juste du Kotlin pur.

\n\n

Exemple 2 : Expect/Actual pour travailler avec SharedPreferences

\n\n

Supposons que nous devions sauvegarder un token. Sur Android — SharedPreferences, sur iOS — UserDefaults. Montrons la magie de KMP :

\n\n

Code commun (commonMain) :

\n\n
// commonMai                

Blogs

Book Recommendations