K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ;...
Transcript of K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ;...
![Page 1: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/1.jpg)
Kotlin parl'exemple
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
![Page 2: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/2.jpg)
EmmanuVinas
Emmanuel VinasExpert Android & Java
@emmanuelvinas✉ [email protected]
IgorLaborie
Igor LaborieExpert Java & Web
@ilaborie✉ [email protected]
![Page 3: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/3.jpg)
� Roadmap
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
Présentation,Installation
13h30
Exercice
13h45 15h30
...
#1
![Page 4: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/4.jpg)
Wifi
�
Vous avez déjà une connexion internet correcte.
�
Sinon utilisez le wifi Monkey / bananaTree.
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#2
![Page 5: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/5.jpg)
Pré‑requis ‑ IDE
Installation de l'IDE
Android Studio 3.0, Download IntelliJ IDEA
Configuration éventuelle du plugin Kotlin
Tools | Kotlin | Configure Kotlin Plugin
Updates
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#3
![Page 6: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/6.jpg)
Pré‑requis ‑ Exercices
1. git clone http:��github.com/MonkeyPatchIo/KotlinByExample
2. git checkout {branch} avec la branche dans exo�mobile ,
exo�server , exo�web
3. ./gradlew clean assemble test (les tests doivent être en
erreurs)
4. (Optionel) Récupérer la présentation : http://bit.ly/kotlin‑
lab
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#4
![Page 7: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/7.jpg)
Caractéristiques de Kotlin
Dévoilé en 2011 par JetBrains
v1.0 en 2016, v1.1 et v1.2 en 2017
Expressif et pragmatique
Sûr: statiquement typé, null‑safety
Inspiré par Java, Scala, C#, Groovy, ...
Abordable, si on vient de Java
Cross‑platform
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#5
![Page 8: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/8.jpg)
Cible
JVM et Android JavaScript Native avecLLVM
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#6
![Page 9: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/9.jpg)
Water PouringProblem
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#7
![Page 10: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/10.jpg)
Tonneau magique
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#8
![Page 11: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/11.jpg)
Verres
8 / 8 0 / 6 1 / 4
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#9
![Page 12: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/12.jpg)
Remplir
Fill
1 / 4
➡4 / 4
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#10
![Page 13: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/13.jpg)
Verser
Pour
6 / 8
into
2 / 6
➡2 / 8
,
6 / 6
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#11
![Page 14: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/14.jpg)
Vider
Empty
3 / 4
➡0 / 4
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#12
![Page 15: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/15.jpg)
Démo
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#13
![Page 16: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/16.jpg)
Pour démarrer
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#14
![Page 17: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/17.jpg)
Hello World
fun main(args: Array<String>) { println("Hello BreizhCamp !") }
✨ Utilisez Alt + Shift + (Cmd|Ctrl) + K pour convertir une classe Java en
Kotlin
Ou copiez du code Java dans un fichier Kotlin
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#15
![Page 18: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/18.jpg)
Glass
data class Glass(val capacity: Int, val current: Int = 0) { init { require(capacity > 0) { "Capacity: $capacity should be > 0" } require(current in 0..capacity) { "Current: $current should be into [0, $capacity]" } } } typealias State = List<Glass>
ℹ En écrivant du Kotlin vous aurez plein de fun !
Le typealias nécessite Kotlin 1.1.
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#16
![Page 19: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/19.jpg)
Moves
sealed class Move data class Empty(val index: Int) : Move() data class Fill(val index: Int) : Move() data class Pour(val from: Int, val to: Int) : Move() { init { require(from �� to) } }
ℹ Avec les sealed et les data class on peut faire des Abstract Data Class
Le sealed nécessite Kotlin 1.1.
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#17
![Page 20: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/20.jpg)
Excercices
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#18
![Page 21: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/21.jpg)
Choisir son exercice
Serveur avec SpringBoot2
Implémentation du solveurcôté serveur
Android
Définition et affichage de lasolution sous Android
Navigateur avecKotlinJS
Définition et affichage de lasolution dans un navigateur
Freestyle
Implémenter sans guide
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#19
![Page 22: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/22.jpg)
Serveur avec SpringBoot 2
exo�server
Pré‑requisJava 8Un IDE qui marche bien avec Kotlin comme IntelliJ IDEA CE
ExercicesExercice 1: les basesExercice 2: un peu plus loinExercice 3: (SpringBoot) injection, routes, reactor, ...
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#20
![Page 23: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/23.jpg)
Android
exo�mobile
Pré‑requisJava 8
Android Studio 3Android SDK 27
ExercicesExercice 1: les basesExercice 2: un peu plus loinExercice 3: android
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#21
![Page 24: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/24.jpg)
Navigateur avec KotlinJS
exo�web
Pré‑requisJava 8NodeJS LTS ou stable (8+)Un IDE qui marche bien avec Kotlin comme IntelliJ IDEA CEUn navigateur moderne
ExercicesExercice 1: les basesExercice 2: construire du HTML avec le DSL kotlinx‑htmlExercice 3: créer des actionsExercice 4: implémenter la résolution du problème
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#22
![Page 25: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/25.jpg)
Freestyle
Pré‑requisJava 6+Un IDE qui marche bien avec Kotlin comme IntelliJ IDEA CE
ExerciceRésoudre le problème du transvasement en Kotlin
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#23
![Page 26: K o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelVinas @ilaborie #Kotlin # û0 ; úH>HÇ úú ú;H>ââ>HÇ ú ±³¼³° F 0 Ç ±³¼´µ ±µ¼³° ûûû](https://reader034.fdocument.pub/reader034/viewer/2022052102/603c96d6d7ffa6540e28c26d/html5/thumbnails/26.jpg)
Liens
Koans
Référence
https://kotlin.link/
Blog
Forum
Slack
Kotlin Evolution and Enhancement Process
@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�
#24