Kotlin par l'exemple
Speakers
Roadmap
- Water Pouring Problem
- Pour démarrer
- Excercices
Pré-requis - IDE
-
Installation de l'IDE
Android Studio 3.0, Download IntelliJ IDEA -
Configuration du plugin Kotlin
Tools | Kotlin | Configure Kotlin Plugin Updates
SélectionnerEarly Access Preview 1.2
Puis cliquer surCheck for updates now
Pré-requis - Exercices
-
Récupérer la présentation
https://ilaborie.github.io/slides/kotlinHandsOn/devoxx-ma.pdf git clone http://github.com/MonkeyPatchIo/KotlinByExample
-
git checkout exo-server
ougit checkout exo-web
ougit checkout exo-mobile
./gradlew clean assemble test
Pourquoi un nouveau langage ?
- Écrire du code plus sûr
- Facilité la maintenance
- Écrire plus rapidement
- Résoudre de nouveaux problèmes
- ...
Caractéristiques de Kotlin
- Éviter les NPE, statiquement typé
- Abordable, si on vient de Java
- Expressif et pragmatique
- Inspiré par Java, Scala, C#, Groovy, ...
- Cross-platform
Cible
JVM et Android
JavaScript
Native avec LLVM
Water Pouring Problem
Théière magique
Verres
8 / 8
<div class="glass-container">
<div class="glass"
style="height: 6rem;background-image: linear-gradient(to top, #e2b65e 0%, transparent 0px);"></div>
<span>0 / 6</span>
</div>
<div class="glass-container">
<div class="glass"
style="height: 4rem;background-image: linear-gradient(to top, #e2b65e 25%, transparent 0px);"></div>
<span>1 / 4</span>
</div>
Remplir
Fill
1 / 4
➡️
4 / 4
Vider
Empty
3 / 4
➡️
0 / 4
Verser
Pour
6 / 8
into
2 / 6
<span class="ope">➡️</span>
<div class="glass-container">
<div class="glass"
style="height: 8rem;background-image: linear-gradient(to top, #e2b65e 25%, transparent 0px);"></div>
<span>2 / 8</span>
</div>
,
<div class="glass-container">
<div class="glass"
style="height: 4rem;background-image: linear-gradient(to top, #e2b65e 100%, transparent 0px);"></div>
<span>6 / 6</span>
</div>
Démo
Pour démarrer
Hello World
fun main(args: Array<String>) {
println("Hello Devoxx Morocco !")
}
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>
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)
}
}
Excercices
Choisir son exercice
Serveur avec SpringBoot 2 Implémentation du solveur côté serveur
Android Définition et affichage de la solution sous Android
Navigateur avec KotlinJS Définition et affichage de la solution dans un navigateur
Freestyle Implémenter sans guide
Serveur avec SpringBoot 2
exo-server
Pré-requis
- Java 8
- Un IDE qui marche bien avec Kotlin comme IntelliJ IDEA CE
Exercices
- Exercice 1: les bases
- Exercice 2: un peu plus loin
- Exercice 3: (SpringBoot) injection, routes, reactor, ...
Android
exo-mobile
Pré-requis
- Java 8
- Android Studio 3
- Android SDK 27
Exercices
- Exercice 1: les bases
- Exercice 2: un peu plus loin
- Exercice 3: android
Freestyle
Pré-requis
- Java 6+
- Un IDE qui marche bien avec Kotlin comme IntelliJ IDEA CE
Exercice
- Résoudre le problème du transvasement en Kotlin