Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin en 2019

Yacine Rezgui
September 12, 2019

Kotlin en 2019

Pour la plupart des développeurs qui ont utilisé Kotlin, leur expérience a commencé sur mobile avec Android quand le support officiel a été annoncé en 2017. Depuis, le langage a beaucoup évolué et son support s'est continuellement amélioré. Dans cette présentation, je parlerai de l'état actuel de Kotlin sur Android mais aussi sur les autres plateformes ainsi qu'un aperçu de son futur.

Yacine Rezgui

September 12, 2019
Tweet

More Decks by Yacine Rezgui

Other Decks in Programming

Transcript

  1. Developer Advocate chez Google Yacine Rezgui ० Je faisais du

    front et back en JavaScript ० J’ai débuté le dev Android avec ce job ० J’avais jamais codé avec Kotlin avant
  2. Kotlin ० Créé par JetBrains ० Orienté Objet ० Typé

    statiquement ० Inférence de types ० Multi-plateforme package hello fun main() { println("Hello World") } class Greeter(val name: String) { fun greet() { println("Hello, $name") } } fun main(args: Array<String>) { Greeter(args[0]).greet() }
  3. Historique Kotlin est annoncé Création de Kotlin par Jetbrains Kotlin

    1.3 (Octobre) Coroutines stable Kotlin/Native beta Kotlin 1.1 (Mars) Support de JavaScript Introduction des coroutines 2011 2012 2013 2014 2015 2016 2017 2018 2019 ? Kotlin est sorti Les outils de développement sont mis en open source Kotlin 1.0 Première version stable Kotlin 1.2 (Novembre) Partage de code entre plates-formes Kotlin 1.4 Kotlin/Native stable?
  4. Android Développement Android SDK Développement d’applications en Java 2008 2009

    2017 2018 2019 2020 ? Kotlin sur Android Support du langage de programmation Android NDK Support du C et C++ (jeux et applications portées)
  5. Android Studio ❤ Kotlin • Kotlin plugin fait parti Android

    Studio • Lint checks & support de refactorings • Templates de projets et exemples de code • Kotlin-friendly Android SDK (vérification ) • kapt.incremental.apt=true • Kotlin-aware R8 optimizations
  6. Android Studio ❤ Kotlin • Kotlin plugin fait parti Android

    Studio • Lint checks & support de refactorings • Templates de projets et exemples de code • Kotlin-friendly Android SDK (vérification ) • kapt.incremental.apt=true • Kotlin-aware R8 optimizations
  7. Kotlin ❤ Companion Object fun main() { println(Greeter.hello().greet("Olive")) } class

    Greeter(val greeting: String) { fun greet(name: String) = "$greeting, $name!" companion object { fun hello() = Greeter("Hello") } }
  8. But Java Companion Object public final class Greeter { public

    static final Companion Companion = new Companion(); private final String greeting; public Greeter(String greeting) { this.greeting = greeting; } public String getGreeting() { return greeting; } public String greet(String name) { return greeting + ", " + name; } public static final class Companion { private Companion() {} public Greeter hello() { return new Greeter("Hello"); } } }
  9. Fortunately R8 ❤ Kotlin public final class Greeter { -

    public static final Companion Companion = new Companion(); private final String greeting; - public static final class Companion { - private Companion() {} - - public Greeter hello() { - return new Greeter("Hello"); - } - } + public static Greeter hello() { + return new Greeter("Hello"); + } public String greet(String name) { return greeting + ", " + name; } }
  10. Android KTX (core) sharedPreferences .edit() // create an Editor .putBoolean("key",

    value) .apply() // write to disk asynchronously // Commit a new value asynchronously sharedPreferences.edit { putBoolean("key", value) }
  11. Android Jetpack ❤ Kotlin & Coroutines • Kotlin-friendly APIs •

    Room suspend functions • WorkManager CoroutineWorker • Lifecycles coroutine scopes • ViewModel coroutine scope • LiveData coroutine builder • Navigation SafeArgs generates Kotlin • + more KTX libraries...
  12. Jetpack Compose ० ⚠ Expérimental ० Dégroupé d’Android Framework ०

    Custom Kotlin compiler plugin @Composable fun Greeting(name: String) { Text("Hello $name") }
  13. Android Advocates ❤ Kotlin • Exemples en Kotlin • Kotlin

    snippets dans la documentation • API documentation en Kotlin • Articles, vidéos, conférences...
  14. Documentation ❤ Kotlin • Migration vers des pages Kotlin •

    Code snippets en Kotlin • Switch entre Java et Kotlin
  15. Learning ❤ Kotlin • Udacity ◦ Developing Android Apps with

    Kotlin ◦ Kotlin Bootcamp for Programmers • Android Developers sur Medium • Kotlin/Everywhere évènements • raywenderlich.com • blog.mindorks.com
  16. Samples ❤ Kotlin • Google I/O et ADS apps •

    Sunflower • Plaid • developer.android.com/samples
  17. OkHttp ० Client HTTP ० Créé par Square ० 100%

    Kotlin depuis la version 4 ० Multi-plateforme dans le futur? fun post(url: String, json: String): String { val mediaType = MediaType.parse("application/json;charset=utf-8") val client = OkHttpClient() val body = RequestBody.create(mediaType, json) val request = Request.Builder().url(url).post(body).build() val response = client.newCall(request).execute() return response.body().string() }
  18. Ktor ० Framework Web ० Client/Serveur ० 100% Kotlin ०

    Multi-plateforme fun main(args: Array<String>) { val server = embeddedServer(Netty, port = 8080) { routing { get("/") { call.respondText("Hello World!", ContentType.Text.Plain) } get("/demo") { call.respondText("HELLO WORLD!") } } } server.start(wait = true) }
  19. SQLDelight ० Créé des APIs à partir de requêtes SQL

    ० Créé par Square ० 100% Kotlin ० Multi-plateforme selectAll: SELECT * FROM hockeyPlayer; insert: INSERT INTO hockeyPlayer(player_number, full_name) VALUES (?, ?); insertFullPlayerObject: INSERT INTO hockeyPlayer(player_number, full_name) VALUES ?;
  20. SQLDelight ० Créé des APIs à partir de requêtes SQL

    ० Créé par Square ० 100% Kotlin ० Multi-plateforme val database = Database(driver) val playerQueries: PlayerQueries = database.playerQueries println(playerQueries.selectAll().executeAsList()) // Prints [HockeyPlayer.Impl(15, "Ryan Getzlaf")] playerQueries.insert(player_number = 10, full_name = "Corey Perry") println(playerQueries.selectAll().executeAsList()) // Prints [HockeyPlayer.Impl(15, "Ryan Getzlaf"), ...] val player = HockeyPlayer(10, "Ronald McDonald") playerQueries.insertFullPlayerObject(player)
  21. Google Cloud Run ० Image Docker comme point d’entrée ०

    Démarre à la première requête ० S’arrête à la dernière requête ० $0.000024/CPU par seconde ० $0.0000025/GB de RAM par seconde ० $0.40/million de requêtes gcloud beta run deploy --image gcr.io/PID/helloworld --platform managed
  22. Kotlin dans le futur? ० Plus de coroutines! ० Nouvelles

    fonctionnalités du langage ० Croissance de librairies venant de l'écosystème ० Multi-plateforme et Kotlin/Native ० Meilleure expérience développeur