SlideShare a Scribd company logo
Smarter development for the JVM
#GeekBreakFast
Kotlin
@arnogiu
Work @ ekito
App & Gear Maker
Mobile & Cloud DevArnaud GIULIANI
3
« production ready »
15.02.2016
Yet another JVM
Language ?
5
The new « Swift »
for Android ?
https://goo.gl/W5g6Do - mid 2014
Limits of java
- Verbose
- Type inference
- No properties / Lazy / Delegate
- Checked exception
- NullPointerException
- Extensibility
- End of lines with ;
https://goo.gl/HIrmC9 @sdeleuze
But Java is great …
- Fast
- Optimized bytecode
- Static typing
- Simple to learn
- Amazing ecosystem
Today’s IT
Challenge
Responsive
Resilient
Scalable
Productive
Kotlin, smarter development for the jvm
(not only) Functional
programming
First class functions, immutability, no side effects,
conciseness …
11
Ready for Reactive
Programming
How K can help
you ?
- Conciseness
- Null Safety & Immutability protection
- Static Typing & Smart Casts
- Open programming styles (lambdas, high order functions …)
- Java interop
What’s
Kotlin ?
- Fully open source (built by Jetbrains)
- Run on Java 6+
- Static typing & type inference
- Modern language features
- 1st grade tooling
What’s inside
Kotlin ?
- String templates
- Properties
- Lambdas
- Data class
- Smart cast
- Null safety
- Lazy property
- Default values for function
parameters
- Extension Functions
- No more ;
- Single-expression
functions
- When expression
- let, apply, use, with
- Collections
- Android Extensions Plugin
Compare with
Same conciseness and expressive code, but
Kotlin static typing and null-safety make a big
difference.
"Some people say Kotlin has 80% the power of
Scala, with 20% of the features" * 

"Kotlin is a software engineering language in
contrast to Scala which is a computing science
language." *
Swift and Kotlin are VERY similar. Swift is LLVM
based and has C interop while Kotlin is JVM based
and has Java interop.
* Quotes from Kotlin:TheYing andYang of Programming Languages
Use Cases
Source : poll on Kotlin Slack (early 2016)https://goo.gl/HIrmC9 @sdeleuze
17
Want some nougat ?
18
Slowing Deployment
https://goo.gl/2sOGBd
19
20
is Kotlin Android friendly ?
https://github.com/SidneyXu/AndroidDemoIn4Languages
Method counts by Language
Where to use Kotlin ?*
*everywhere you use Java
22
let’s go write some Kotlin !
Ready to use
Easy to run
24
Getting started with
gradle
buildscript {
ext.kotlin_version = '<version to use>'
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: "kotlin"
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
1.0.5-2
also available with maven
25
IntelliJ
26
Gradle tips for Kotlin
# Gradle

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:
+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true
org.gradle.deamon=true



# Kotlin

kotlin.incremental=true



# Android Studio 2.2+

android.enableBuildCache=true
In your gradle.properties
https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d#.k44v7axsk
Smarter
development
with K
29
Typing & Inference
val a: Int = 1

val b = 1 // `Int` type is inferred
var x = 5 // `Int` type is inferred

x += 1
Infered values
Mutable values
val : constant value - IMMUTABLE
var : variable value - MUTABLE
USE VAL AS MUCH AS POSSIBLE !
30
Safety with Optionals
var stringA: String = "foo"

stringA = null //Compilation error - stringA is a String (non optional)



var stringB: String? = "bar" // stringB is an Optional String

stringB = null //ok
Optional value
31
Late initialization, Lazy, Delegates …
// set length default value manually

val length = if (stringB != null) stringB.length else -1

//or with the Elvis operator

val length = stringB?.length ?: -1
DefaultValue & Elvis Operator
val length = stringB.length // Compilation error - stringB can be null !

// use ? the safe call operator

val length = stringB?.length //Value or null - length is type Int?
val length = stringB!!.length //Value or explicit throw NPE - length is type Int
Safe call with ?. or Explicit call with !!.
32
Example
33
Class
class User (

var userName: String,

var firstName: String,

var lastName: String,

var location: Point? = null

)
POJO +
- Getter
- Setter
- Constructors
34
Data Class
data class User (

var userName: String,

var firstName: String,

var lastName: String,

var location: Point? = null

)
POJO +
- Getter
- Setter
- Constructors
- toString
- hashcode
- equals
- copy
35
POJO ?
36
Properties
// readonly property

val isEmpty: Boolean

get() = this.size == 0
Properties can be declared in constructor or in class
You can also handle getter & setter
// customer getter & setter

var stringRepresentation: String

get() = this.toString()

set(value) {

setDataFromString(value) // parses the string and assigns values to other properties

}
class ApiKey(var weatherKey: String, var geocodeKey: String){

var debug : Boolean = false

}
37
Object Component
// singleton

object Resource {

val name = "Name"

}
println(" my resource is : ${Resource.name}")
class StringCalculator{
// class helper

companion object{

val operators = arrayOf("+","-","x","/")

}

}
println(" my operators are : ${StringCalculator.operators}")
Singleton Class
Companion Object
38
Example
data class User(val name: String = "", val age: Int = 0)
val jack = User(name = "Jack", age = 1)

val anotherJack = jack.copy(age = 2)
json class
data class usage
39
When
when (s) {

1 -> print("x == 1")

2 -> print("x == 2")

else -> { // Note the block

print("x is neither 1 nor 2")

}

}
Flow Control (replace your old if blocks)
when (x) {

in 1..10 -> print("x is in the range")

in validNumbers -> print("x is valid")

!in 10..20 -> print("x is outside the range")

else -> print("none of the above")

}
Pattern Matching
in <range> ->
is <type> ->
expression ->
when (s) {

is String -> print("s is a string")

else -> print("s is not a string")

}
40
Example
41
Functions
fun reformat(str: String,

normalizeCase: Boolean = true,

upperCaseFirstLetter: Boolean = true,

wordSeparator: Char = ' '): String {



}
Named Parameters & default values
reformat(str, true, true, '_') // old way to call

reformat(str, wordSeparator = '_') // using default values & named params
fun String.hello(): String = "Hello " + this
val hi = "Arnaud !".hello()

println("$hi") // Hello Arnaud !
Extension
42
Lambdas
val fab = findViewById(R.id.fab) as FloatingActionButton

fab.setOnClickListener { view -> popLocationDialog(view) }
A lambda expression or an anonymous function is a “function literal”, i.e. a
function that is not declared, but passed immediately as an expression
- A lambda expression is always surrounded by curly braces,
- Its parameters (if any) are declared before -> (parameter types may be omitted),
- The body goes after -> (when present).
numberString.split("n").flatMap { it.split(separator) }

.map(Integer::parseInt)

.map(::checkPositiveNumber)

.filter { it <= 1000 }

.sum()
43
Destructuring Data
fun extractDelimiter(input: String): Pair<String, String> = …
val (separator, numberString) = extractDelimiter(input)
data class User(var name : String,var age : Int)
val toto = User("toto",42)

val (name,age) = toto
Returning two values with Pair
Destructured values with data classes
44
Collections
// immutable list

val list = listOf("a", "b", "c","aa")

list.filter { it.startsWith("a") }
// immutable map

val map = mapOf("a" to 1, "b" to 2, "c" to 3)

for ((k, v) in map) {

println("$k -> $v")

}


// mutable map

val map2 = HashMap<String,String>()


// direct map access

map2["a"] = "my value"

println(map2["a"])
// range

for (i in 1..100) { //... }
45
InterOp
object UserSingleton{

fun stringify(user : User) : String{

val (name,age) = user

return "[name=$name][age=$age]"

}

}



fun WhatIsyourAge(user : User){

println("Your age is ${user.age}")

}



data class User (val name: String, val age : Int){

companion object{

fun sayHello(user : User){

println("Hello ${user.name}")

}

}

}
User u = new User("toto",42);

User.Companion.sayHello(u);

UserUtilsKt.WhatIsyourAge(u);

System.out.println("stringify : "+UserSingleton.INSTANCE.stringify(u));
Kotlin code
Calling Kotlin from Java
Sweet stuffs for
47
Kotlin’s Android
Extensions
android {
...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
apply plugin: 'com.android.application'
apply plugin:‘kotlin-android’
apply plugin:‘kotlin-android-extensions’ // if use extensions
In your build.gradle
Kotlin
Java
Anko - Android DSL
Async task in few lines
doAsync {
// Long background task
uiThread {
result.text = "Done"
}
}
Layout DSL
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
}
}
https://github.com/Kotlin/anko
Kotlin, smarter development for the jvm
One of our longest journey …
Reactive
Programming
Lamba expressions
Functional Programming
Reactive Streams
http://reactivex.io/documentation/operators.html
http://www.reactive-streams.org/
https://spring.io/blog/2016/06/07/notes-on-reactive-
programming-part-i-the-reactive-landscape
54
Example - Rx/Retrofit
Kotlin
Java
55
Example - Rx/Realm
56
Just another hype
JVM stuff ?
57
Ready to go ?
58
Production
ready ?
59
Always hard to start …
60
Our feedback
with K
- Easy to start small & grow (no big bang)
- Tool support is very good
- Great feedback about the language itself
- Stable in production !
- Magical conversion … but take care
- Hard to come back to java …
61
IF YOU DON'T LOOK AT
JAVA AND THINK, "THIS
COULD BE BETTER", DON'T
SWITCH.
@RunChristinaRun
62
Learning
Kotlin
63
Try Kotlin online
http://try.kotlinlang.org/#/Examples/
Kotlin Reference
https://kotlinlang.org/docs/reference/
Kotlin Cheat Sheet (by ekito)
http://www.slideshare.net/arnaudgiuliani/kotlin-
cheat-sheet-by-ekito
Kotlin Community
https://kotlinlang.org/community.html
64
Kotlin 1.1
Thank you :)

More Related Content

What's hot (19)

PDF
Kotlin Developer Starter in Android projects
Bartosz Kosarzycki
 
PDF
Introduction to kotlin
NAVER Engineering
 
PPTX
Kotlin
YeldosTanikin
 
PDF
Swift and Kotlin Presentation
Andrzej Sitek
 
PDF
Introduction to kotlin for android app development gdg ahmedabad dev fest 2017
Hardik Trivedi
 
PDF
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Tudor Dragan
 
PDF
Kotlin boost yourproductivity
nklmish
 
PPTX
Introduction to kotlin + spring boot demo
Muhammad Abdullah
 
PDF
The Kotlin Programming Language, Svetlana Isakova
Vasil Remeniuk
 
PDF
Coding for Android on steroids with Kotlin
Kai Koenig
 
PDF
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan s.r.o.
 
PDF
Little Helpers for Android Development with Kotlin
Kai Koenig
 
PDF
Kotlin - Better Java
Dariusz Lorenc
 
PPT
The Kotlin Programming Language
intelliyole
 
PDF
Intro to Kotlin
Magda Miu
 
PPTX
K is for Kotlin
TechMagic
 
PDF
No excuses, switch to kotlin
Thijs Suijten
 
PDF
(How) can we benefit from adopting scala?
Tomasz Wrobel
 
PDF
Android antipatterns
Bartosz Kosarzycki
 
Kotlin Developer Starter in Android projects
Bartosz Kosarzycki
 
Introduction to kotlin
NAVER Engineering
 
Swift and Kotlin Presentation
Andrzej Sitek
 
Introduction to kotlin for android app development gdg ahmedabad dev fest 2017
Hardik Trivedi
 
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Tudor Dragan
 
Kotlin boost yourproductivity
nklmish
 
Introduction to kotlin + spring boot demo
Muhammad Abdullah
 
The Kotlin Programming Language, Svetlana Isakova
Vasil Remeniuk
 
Coding for Android on steroids with Kotlin
Kai Koenig
 
eMan Dev Meetup: Kotlin - A Language we should know it exists (part 02/03) 18...
eMan s.r.o.
 
Little Helpers for Android Development with Kotlin
Kai Koenig
 
Kotlin - Better Java
Dariusz Lorenc
 
The Kotlin Programming Language
intelliyole
 
Intro to Kotlin
Magda Miu
 
K is for Kotlin
TechMagic
 
No excuses, switch to kotlin
Thijs Suijten
 
(How) can we benefit from adopting scala?
Tomasz Wrobel
 
Android antipatterns
Bartosz Kosarzycki
 

Viewers also liked (20)

PDF
Kotlin на практике
Виталий Бендик
 
PDF
RxJava - Programação assíncrona para Android.
Clerton Leal
 
PDF
Pair programming demystified
Marek Kirejczyk
 
PDF
First few months with Kotlin - Introduction through android examples
Nebojša Vukšić
 
PDF
Groovy Powered Clean Code
GR8Conf
 
PDF
Metaprogramming with Groovy
GR8Conf
 
PPTX
Groovy on Android
Alexey Zhokhov
 
PPTX
Metaprogramming with Groovy
Ali Tanwir
 
PDF
Groovy in the Cloud
Daniel Woods
 
ODP
Ci for-android-apps
Anthony Dahanne
 
PPTX
Spring one 2012 Groovy as a weapon of maas PaaSification
Nenad Bogojevic
 
PDF
We thought we were doing continuous delivery and then...
Suzie Prince
 
PDF
Java collections the force awakens
RichardWarburton
 
PDF
Groovy for java developers
Puneet Behl
 
PDF
Reactive Streams and the Wide World of Groovy
Steve Pember
 
PDF
Be More Productive with Kotlin
Brandon Wever
 
PDF
Groovy on Android (as of 2016)
Kevin H.A. Tan
 
PDF
Building an Extensible, Resumable DSL on Top of Apache Groovy
jgcloudbees
 
PDF
Java 8 and 9 in Anger
Trisha Gee
 
PDF
Apache Groovy: the language and the ecosystem
Kostas Saidis
 
Kotlin на практике
Виталий Бендик
 
RxJava - Programação assíncrona para Android.
Clerton Leal
 
Pair programming demystified
Marek Kirejczyk
 
First few months with Kotlin - Introduction through android examples
Nebojša Vukšić
 
Groovy Powered Clean Code
GR8Conf
 
Metaprogramming with Groovy
GR8Conf
 
Groovy on Android
Alexey Zhokhov
 
Metaprogramming with Groovy
Ali Tanwir
 
Groovy in the Cloud
Daniel Woods
 
Ci for-android-apps
Anthony Dahanne
 
Spring one 2012 Groovy as a weapon of maas PaaSification
Nenad Bogojevic
 
We thought we were doing continuous delivery and then...
Suzie Prince
 
Java collections the force awakens
RichardWarburton
 
Groovy for java developers
Puneet Behl
 
Reactive Streams and the Wide World of Groovy
Steve Pember
 
Be More Productive with Kotlin
Brandon Wever
 
Groovy on Android (as of 2016)
Kevin H.A. Tan
 
Building an Extensible, Resumable DSL on Top of Apache Groovy
jgcloudbees
 
Java 8 and 9 in Anger
Trisha Gee
 
Apache Groovy: the language and the ecosystem
Kostas Saidis
 
Ad

Similar to Kotlin, smarter development for the jvm (20)

PDF
Kotlin: A pragmatic language by JetBrains
Jigar Gosar
 
PDF
A quick and fast intro to Kotlin
XPeppers
 
PDF
Android 101 - Building a simple app with Kotlin in 90 minutes
Kai Koenig
 
PDF
Summer of Tech 2017 - Kotlin/Android bootcamp
Kai Koenig
 
PDF
Kotlin what_you_need_to_know-converted event 4 with nigerians
junaidhasan17
 
PDF
Privet Kotlin (Windy City DevFest)
Cody Engel
 
PDF
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Codemotion
 
PPTX
Introduction to Kotlin Language and its application to Android platform
EastBanc Tachnologies
 
PPTX
Kotlin – the future of android
DJ Rausch
 
PDF
Exploring Kotlin
Johan Haleby
 
PDF
Having Fun with Kotlin Android - DILo Surabaya
DILo Surabaya
 
PPTX
KotlinForJavaDevelopers-UJUG.pptx
Ian Robertson
 
PDF
Kotlin @ Devoxx 2011
Andrey Breslav
 
PDF
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
PDF
Lightning talk: Kotlin
Evolve
 
PPTX
Why kotlininandroid
Phani Kumar Gullapalli
 
PDF
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
STX Next
 
PDF
Kotlin: forse è la volta buona (Trento)
Davide Cerbo
 
PPTX
Kotlin Language Features - A Java comparison
Ed Austin
 
PDF
Kotlin intro
Elifarley Cruz
 
Kotlin: A pragmatic language by JetBrains
Jigar Gosar
 
A quick and fast intro to Kotlin
XPeppers
 
Android 101 - Building a simple app with Kotlin in 90 minutes
Kai Koenig
 
Summer of Tech 2017 - Kotlin/Android bootcamp
Kai Koenig
 
Kotlin what_you_need_to_know-converted event 4 with nigerians
junaidhasan17
 
Privet Kotlin (Windy City DevFest)
Cody Engel
 
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Codemotion
 
Introduction to Kotlin Language and its application to Android platform
EastBanc Tachnologies
 
Kotlin – the future of android
DJ Rausch
 
Exploring Kotlin
Johan Haleby
 
Having Fun with Kotlin Android - DILo Surabaya
DILo Surabaya
 
KotlinForJavaDevelopers-UJUG.pptx
Ian Robertson
 
Kotlin @ Devoxx 2011
Andrey Breslav
 
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
Lightning talk: Kotlin
Evolve
 
Why kotlininandroid
Phani Kumar Gullapalli
 
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
STX Next
 
Kotlin: forse è la volta buona (Trento)
Davide Cerbo
 
Kotlin Language Features - A Java comparison
Ed Austin
 
Kotlin intro
Elifarley Cruz
 
Ad

Recently uploaded (20)

PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 

Kotlin, smarter development for the jvm

  • 1. Smarter development for the JVM #GeekBreakFast Kotlin
  • 2. @arnogiu Work @ ekito App & Gear Maker Mobile & Cloud DevArnaud GIULIANI
  • 5. 5 The new « Swift » for Android ? https://goo.gl/W5g6Do - mid 2014
  • 6. Limits of java - Verbose - Type inference - No properties / Lazy / Delegate - Checked exception - NullPointerException - Extensibility - End of lines with ; https://goo.gl/HIrmC9 @sdeleuze
  • 7. But Java is great … - Fast - Optimized bytecode - Static typing - Simple to learn - Amazing ecosystem
  • 10. (not only) Functional programming First class functions, immutability, no side effects, conciseness …
  • 12. How K can help you ? - Conciseness - Null Safety & Immutability protection - Static Typing & Smart Casts - Open programming styles (lambdas, high order functions …) - Java interop
  • 13. What’s Kotlin ? - Fully open source (built by Jetbrains) - Run on Java 6+ - Static typing & type inference - Modern language features - 1st grade tooling
  • 14. What’s inside Kotlin ? - String templates - Properties - Lambdas - Data class - Smart cast - Null safety - Lazy property - Default values for function parameters - Extension Functions - No more ; - Single-expression functions - When expression - let, apply, use, with - Collections - Android Extensions Plugin
  • 15. Compare with Same conciseness and expressive code, but Kotlin static typing and null-safety make a big difference. "Some people say Kotlin has 80% the power of Scala, with 20% of the features" * 
 "Kotlin is a software engineering language in contrast to Scala which is a computing science language." * Swift and Kotlin are VERY similar. Swift is LLVM based and has C interop while Kotlin is JVM based and has Java interop. * Quotes from Kotlin:TheYing andYang of Programming Languages
  • 16. Use Cases Source : poll on Kotlin Slack (early 2016)https://goo.gl/HIrmC9 @sdeleuze
  • 19. 19
  • 20. 20 is Kotlin Android friendly ? https://github.com/SidneyXu/AndroidDemoIn4Languages Method counts by Language
  • 21. Where to use Kotlin ?* *everywhere you use Java
  • 22. 22 let’s go write some Kotlin !
  • 24. 24 Getting started with gradle buildscript { ext.kotlin_version = '<version to use>' dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: "kotlin" dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } 1.0.5-2 also available with maven
  • 26. 26
  • 27. Gradle tips for Kotlin # Gradle
 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX: +HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
 org.gradle.parallel=true org.gradle.deamon=true
 
 # Kotlin
 kotlin.incremental=true
 
 # Android Studio 2.2+
 android.enableBuildCache=true In your gradle.properties https://medium.com/keepsafe-engineering/kotlin-vs-java-compilation-speed-e6c174b39b5d#.k44v7axsk
  • 29. 29 Typing & Inference val a: Int = 1
 val b = 1 // `Int` type is inferred var x = 5 // `Int` type is inferred
 x += 1 Infered values Mutable values val : constant value - IMMUTABLE var : variable value - MUTABLE USE VAL AS MUCH AS POSSIBLE !
  • 30. 30 Safety with Optionals var stringA: String = "foo"
 stringA = null //Compilation error - stringA is a String (non optional)
 
 var stringB: String? = "bar" // stringB is an Optional String
 stringB = null //ok Optional value
  • 31. 31 Late initialization, Lazy, Delegates … // set length default value manually
 val length = if (stringB != null) stringB.length else -1
 //or with the Elvis operator
 val length = stringB?.length ?: -1 DefaultValue & Elvis Operator val length = stringB.length // Compilation error - stringB can be null !
 // use ? the safe call operator
 val length = stringB?.length //Value or null - length is type Int? val length = stringB!!.length //Value or explicit throw NPE - length is type Int Safe call with ?. or Explicit call with !!.
  • 33. 33 Class class User (
 var userName: String,
 var firstName: String,
 var lastName: String,
 var location: Point? = null
 ) POJO + - Getter - Setter - Constructors
  • 34. 34 Data Class data class User (
 var userName: String,
 var firstName: String,
 var lastName: String,
 var location: Point? = null
 ) POJO + - Getter - Setter - Constructors - toString - hashcode - equals - copy
  • 36. 36 Properties // readonly property
 val isEmpty: Boolean
 get() = this.size == 0 Properties can be declared in constructor or in class You can also handle getter & setter // customer getter & setter
 var stringRepresentation: String
 get() = this.toString()
 set(value) {
 setDataFromString(value) // parses the string and assigns values to other properties
 } class ApiKey(var weatherKey: String, var geocodeKey: String){
 var debug : Boolean = false
 }
  • 37. 37 Object Component // singleton
 object Resource {
 val name = "Name"
 } println(" my resource is : ${Resource.name}") class StringCalculator{ // class helper
 companion object{
 val operators = arrayOf("+","-","x","/")
 }
 } println(" my operators are : ${StringCalculator.operators}") Singleton Class Companion Object
  • 38. 38 Example data class User(val name: String = "", val age: Int = 0) val jack = User(name = "Jack", age = 1)
 val anotherJack = jack.copy(age = 2) json class data class usage
  • 39. 39 When when (s) {
 1 -> print("x == 1")
 2 -> print("x == 2")
 else -> { // Note the block
 print("x is neither 1 nor 2")
 }
 } Flow Control (replace your old if blocks) when (x) {
 in 1..10 -> print("x is in the range")
 in validNumbers -> print("x is valid")
 !in 10..20 -> print("x is outside the range")
 else -> print("none of the above")
 } Pattern Matching in <range> -> is <type> -> expression -> when (s) {
 is String -> print("s is a string")
 else -> print("s is not a string")
 }
  • 41. 41 Functions fun reformat(str: String,
 normalizeCase: Boolean = true,
 upperCaseFirstLetter: Boolean = true,
 wordSeparator: Char = ' '): String {
 
 } Named Parameters & default values reformat(str, true, true, '_') // old way to call
 reformat(str, wordSeparator = '_') // using default values & named params fun String.hello(): String = "Hello " + this val hi = "Arnaud !".hello()
 println("$hi") // Hello Arnaud ! Extension
  • 42. 42 Lambdas val fab = findViewById(R.id.fab) as FloatingActionButton
 fab.setOnClickListener { view -> popLocationDialog(view) } A lambda expression or an anonymous function is a “function literal”, i.e. a function that is not declared, but passed immediately as an expression - A lambda expression is always surrounded by curly braces, - Its parameters (if any) are declared before -> (parameter types may be omitted), - The body goes after -> (when present). numberString.split("n").flatMap { it.split(separator) }
 .map(Integer::parseInt)
 .map(::checkPositiveNumber)
 .filter { it <= 1000 }
 .sum()
  • 43. 43 Destructuring Data fun extractDelimiter(input: String): Pair<String, String> = … val (separator, numberString) = extractDelimiter(input) data class User(var name : String,var age : Int) val toto = User("toto",42)
 val (name,age) = toto Returning two values with Pair Destructured values with data classes
  • 44. 44 Collections // immutable list
 val list = listOf("a", "b", "c","aa")
 list.filter { it.startsWith("a") } // immutable map
 val map = mapOf("a" to 1, "b" to 2, "c" to 3)
 for ((k, v) in map) {
 println("$k -> $v")
 } 
 // mutable map
 val map2 = HashMap<String,String>() 
 // direct map access
 map2["a"] = "my value"
 println(map2["a"]) // range
 for (i in 1..100) { //... }
  • 45. 45 InterOp object UserSingleton{
 fun stringify(user : User) : String{
 val (name,age) = user
 return "[name=$name][age=$age]"
 }
 }
 
 fun WhatIsyourAge(user : User){
 println("Your age is ${user.age}")
 }
 
 data class User (val name: String, val age : Int){
 companion object{
 fun sayHello(user : User){
 println("Hello ${user.name}")
 }
 }
 } User u = new User("toto",42);
 User.Companion.sayHello(u);
 UserUtilsKt.WhatIsyourAge(u);
 System.out.println("stringify : "+UserSingleton.INSTANCE.stringify(u)); Kotlin code Calling Kotlin from Java
  • 47. 47 Kotlin’s Android Extensions android { ... sourceSets { main.java.srcDirs += 'src/main/kotlin' } } apply plugin: 'com.android.application' apply plugin:‘kotlin-android’ apply plugin:‘kotlin-android-extensions’ // if use extensions In your build.gradle
  • 49. Anko - Android DSL Async task in few lines doAsync { // Long background task uiThread { result.text = "Done" } } Layout DSL verticalLayout { val name = editText() button("Say Hello") { onClick { toast("Hello, ${name.text}!") } } } https://github.com/Kotlin/anko
  • 51. One of our longest journey …
  • 53. Lamba expressions Functional Programming Reactive Streams http://reactivex.io/documentation/operators.html http://www.reactive-streams.org/ https://spring.io/blog/2016/06/07/notes-on-reactive- programming-part-i-the-reactive-landscape
  • 59. 59 Always hard to start …
  • 60. 60 Our feedback with K - Easy to start small & grow (no big bang) - Tool support is very good - Great feedback about the language itself - Stable in production ! - Magical conversion … but take care - Hard to come back to java …
  • 61. 61 IF YOU DON'T LOOK AT JAVA AND THINK, "THIS COULD BE BETTER", DON'T SWITCH. @RunChristinaRun
  • 63. 63 Try Kotlin online http://try.kotlinlang.org/#/Examples/ Kotlin Reference https://kotlinlang.org/docs/reference/ Kotlin Cheat Sheet (by ekito) http://www.slideshare.net/arnaudgiuliani/kotlin- cheat-sheet-by-ekito Kotlin Community https://kotlinlang.org/community.html