k o t l i n p a r l ' exe m p l e · ÿ > ö>, @breizhcamp @emmanuelvinas @ilaborie...

26
Kotlin par l'exemple @breizhcamp @emmanuelVinas @ilaborie #Kotlin #

Upload: others

Post on 09-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

� 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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

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 Ç ±³¼´µ ±µ¼³° ûûû

Liens

Koans

Référence

https://kotlin.link/

Blog

Forum

Slack

Kotlin Evolution and Enhancement Process

@breizhcamp @emmanuelVinas @ilaborie #Kotlin #�

#24