Kotlin for Android
What Kotlin is?
from http://kotl.in/
Basic syntax differences from Java
Java
Kotlin
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
Optional
semicolons!
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
'fun' keyword
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
no more primitive types!
everything is an object
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
var & val
keywords
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
Java
getters &
setters
as
properties
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
String templates
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1831026/Zrzut_ekranu_2015-10-14_o_15.10.30.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832871/Zrzut_ekranu_2015-10-14_o_21.15.16.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1558753/Zrzut_ekranu_2015-07-08_o_17.04.27.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1558752/Zrzut_ekranu_2015-07-08_o_17.04.15.png)
no 'new' keyword
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1561900/Zrzut_ekranu_2015-07-09_o_19.26.22.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1561897/Zrzut_ekranu_2015-07-09_o_19.25.51.png)
Singleton
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1561924/Zrzut_ekranu_2015-07-09_o_19.29.04.png)
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564457/Zrzut_ekranu_2015-07-10_o_21.13.41.png)
JavaBeans...
too much boilerplate code
Basic syntax differences from Java
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564473/Zrzut_ekranu_2015-07-10_o_21.21.24.png)
so Kotlin comes with...
data classes!
equals() / hashCode(), toString(), copy()
defined automatically!
Basic syntax differences from Java
Another key features
- null safety
- not checked exceptions
- getters & setters
- delegations
- lateinit
- named & optional arguments
- lambdas
- extension functions
- type aliases
Null Safety
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564551/Zrzut_ekranu_2015-07-10_o_22.08.15.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564559/Zrzut_ekranu_2015-07-10_o_22.12.51.png)
nullable references:
safe calls:
Null Safety
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564593/Zrzut_ekranu_2015-07-10_o_22.33.29.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1564596/Zrzut_ekranu_2015-07-10_o_22.33.48.png)
too many safe calls?
smart cast (after explicit check) for that:
Null Safety
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1566682/Zrzut_ekranu_2015-07-12_o_20.47.41.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1566671/Zrzut_ekranu_2015-07-12_o_20.42.48.png)
elvis operator:
!! operator:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1566696/Zrzut_ekranu_2015-07-12_o_20.57.01.png)
safe casts (avoiding ClassCastException):
Getters and Setters
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1832973/Zrzut_ekranu_2015-10-14_o_21.37.17.png)
lazy delegation & lateinit
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1833028/Zrzut_ekranu_2015-10-14_o_21.46.16.png)
Named & optional arguments
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1569072/Zrzut_ekranu_2015-07-13_o_20.32.44.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1569073/Zrzut_ekranu_2015-07-13_o_20.33.04.png)
Lambdas
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1569655/Zrzut_ekranu_2015-07-13_o_23.18.03.png)
Extension Functions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1571414/Zrzut_ekranu_2015-07-14_o_16.52.16.png)
Type Aliases
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1571423/Zrzut_ekranu_2015-07-14_o_16.54.46.png)
Java Interop
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572472/Zrzut_ekranu_2015-07-14_o_22.02.25.png)
Java & Kotlin code in one place:
Java Interop
Calling Java code in Kotlin:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578474/Zrzut_ekranu_2015-07-16_o_21.38.31.png)
Java Interop
SAM Conversions:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578494/Zrzut_ekranu_2015-07-16_o_21.49.36.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578497/Zrzut_ekranu_2015-07-16_o_21.49.48.png)
Java Interop
Calling Kotlin code in Java:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578830/Zrzut_ekranu_2015-07-16_o_23.10.37.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578795/Zrzut_ekranu_2015-07-16_o_23.08.50.png)
Fast configuration
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1830968/Zrzut_ekranu_2015-10-14_o_14.54.17.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1830976/Zrzut_ekranu_2015-10-14_o_14.58.10.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1830980/Zrzut_ekranu_2015-10-14_o_14.58.50.png)
Kotlin Android Extensions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572155/Zrzut_ekranu_2015-07-14_o_20.18.16.png)
Kotlin Android Extensions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572155/Zrzut_ekranu_2015-07-14_o_20.18.16.png)
Kotlin Android Extensions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572171/Zrzut_ekranu_2015-07-14_o_20.21.04.png)
Anko
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578160/Zrzut_ekranu_2015-07-16_o_20.09.01.png)
Why Kotlin
for Android?
We have scala, groovy, ceylon...
Kotlin in numbers*...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572547/Zrzut_ekranu_2015-07-14_o_22.33.40.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572550/Zrzut_ekranu_2015-07-14_o_22.35.31.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1572556/Zrzut_ekranu_2015-07-14_o_22.37.03.png)
*from "Using Project Kotlin for Android" by Jake Wharton
More
- Kotlin is developed by JetBrains
- It compiles at least as fast as Java
Any drawbacks?
We are still waiting for Kotlin 1.0
Any drawbacks?
We are still waiting for Kotlin 1.0
"Only very brave souls are using Kotlin for production now" - Andrey Breslav (JetBrains)
Resources
Official Kotlin website:
Frameworks for Android:
https://github.com/JetBrains/anko
https://github.com/pawegio/KAndroid
Misc:
Thank you!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/321127/images/1578197/Octocat.png)