SlideShare a Scribd company logo
Why Kotlin is your next
language?
theory and practice
Aliaksei Zhynhiarouski
1
Dev Day MiniQ, 2016
Kotlin Island
2
Why is Kotlin
• Static Typing bit.ly/st-vs-dyn
• Java + Kotlin = ❤. 

Effortless mixing both in one project
• Java Interoperability. 

100% interoperable with Java.
3
Why is Kotlin
• Null Safety
• Type Inference
• Immutability in the mind
• fun
4
fun main(args : Array<String>) {
println("Hello, MiniQ!")
}
5
val from_value : Type
var from_variable : Type
val i_am_string = “mobile”
var i_am_long = 666L
val i_am_double = 3.14e10
6
val & var
Null Safety
// can’t be null

val foo: String = “Dev Day”


// need always perform the check 

val bar: String? = null
7
Type? = Type or null
Null Safety
val bar: String? = “Dev Day”


var a = bar?.length // 6



var b = bar?.length?.inc() // 7



var c = bar!!.length // can be NPE
8
Null Safety
val bar: String? = null


var a = if (bar != null) bar.length

else 0 // 0



var b = bar?.length ?: 0 // 0

9
Type Definition
class Phone(val brand: String)
10
• concise syntax for constructor
• properties – not fields
• final by default. Use open to open
• simple old java class under the hood
Type Definition
class Phone(val brand: String){
var version: Int = 0
}
11
get() {…}

private set
val phone = Phone(“Apple”)

phone.brand == “Apple” // true
Value Object
data class Phone(val brand: String)
12
toString()
hashCode()
equals()

copy()
Get ready to be inspired
13
Extensions
14
// Usage Example



“MiniQ”.lastChar() // “Q”

// Definition



fun String.lastChar():Char 

= this.get(length - 1)
Extensions
15
// Java under the hood



@file:JvmName(“StringUtils")

StringUtils.lastChar(“Mobile”);
Extensions
16
Collections.max(list)



↓
list.max()
Extensions
17
operator fun BigDecimal.inc() 

= this + BigDecimal.ONE


// Example

var counter = BigDecimal.ZERO



print(++counter) // 1
Extensions
18
“25”.toInt() // Int
“8.$minor.5”.toOsVersion() // to object
Android Extensions
19
val text = find<TextView>(R.id.text)
Just extend Activity and have fun
inline fun <reified T : View> 

Activity.find(id: Int): T = this.findViewById(id) as T
final TextView text = (TextView) v.findViewById(R.id.text);
Lambdas
20
val boys = listOf(

Boy(“Alex”), Boy(“Petr”), Boy(“Oleg”))

// 1 

boys.filter({ b: Boy -> b.age > 18 })

// 2

boys.filter({ it.age > 18 })


// 3

boys.filter { it.age > 18 }
λ
21
boys.filter { it.age > 18 }
.map { Pair(it, Boy("Eugene")) }
.forEach { dance(it) }
// Definition



inline fun <T> Iterable<T>.filter

(predicate: (T) -> Boolean)

λ
22
db.inTransaction {

delete(“users”, “name = ?”, arrayOf(“Alex”))

}
fun SQLiteDatabase.inTransaction(func: SQLiteDatabase.() -> Unit) {
beginTransaction()
try {

func()

setTransactionSuccessful()
} finally {
endTransaction()
}
}
Delegates – right way
23
class View {















}
val lazyProp by lazy { “Dev Day” }
val ops by observable(“”) { 

prop, old, new ->
print("$old to $new")
}
Delegates – wow way
24
class Activity {













}
private val btn: Button by lazy {

findViewById(R.id.btn) as Button

}



override fun onCreate(savedBundle: Bundle?) {

btn.setText(“MiniQ!”)

}


Delegates – wow way
25
class Query(val props: Map<String, String>) {



}
val category by props

val model by props



val info: String

get() {

return “$category - $model” 

}
Delegates – wow way
26
class Query(val props: Map<String, String>) {



}
val category by props

val model by props

…

val props = mapOf(“category” to “XXX”,

“model” to “YYY”)

val query = Query(props)
print(query.info) // “XXX - YYY”

DSL
27
• Type-safe
• Express your code by flexible syntax
• Ideal to build own query engine
• if/for/when just inside DSL
DSL
28
"(#C1 = :active) AND (#C2 = :type) AND " +
"(attribute_not_exists(#C1) OR #C1 IN
(:model, :allModels)) AND " +

"...";

if (smth)

append("(#C2 = :active) AND NOT
contains(#C3, :brandAll)");
…
// wait, oh shi~
DSL
29
val expr = filterExpr {

group {

eq("#1", ":2") and eq("#1", ":2") 

or group {

eq("#2", ":2")

if (smth) { 

and eq("#2", ":2") 

}

}

and ……

}
One more DSL thing
30
Gradle 3 meets Kotlin
Kotlin 1.1
typealias Callback<T> = (T) -> T
// And now

fun alias(cb: Callback<String>) {}
31
Type aliases
Kotlin 1.1
typealias Table<K> = 



MutableMap<K, MutableList<String>>
32
Type aliases
Kotlin 1.1
val future = async<String> {
(1..5).map {
await(loooongAsyncOperation(it))



}.joinToString("n")
}
33
Coroutines with async/await
Why is Kotlin
• Use all existing Java frameworks and
libraries
• Code reviews are not a problem
• Suitable for enterprise Java
• Adopting is low risk
34
Why is Kotlin
• Android
• Gradle
• Can be learned in a few hours
• Kotlin also compiles to JavaScript ;)
35
http://try.kotl.in
36
Links
Awesome Kotlin kotlin.link
Slack kotlinlang.slack.com 

Local’s Chat gitter.im/JavaBy/Kotlin

37
Links just for you
Kotlin compilation speed

Performance: Kotlin Bytecode
https://www.youtube.com/watch?v=eQ4YHpAXdp4

Experience of Square with Kotlin. Good analysis

Android Development advanced

https://vimeo.com/144877458

Kotlin in real project with a lot of nuances

https://www.youtube.com/watch?v=CABN2r4GPpQ
38
Kotlin friends
39
jprof.by
bkug.by
Go v Minsk, ja sozdal

More Related Content

What's hot (20)

PDF
Elm introduction
Mix & Go
 
PDF
Functional Pe(a)rls - the Purely Functional Datastructures edition
osfameron
 
PDF
Is Haskell an acceptable Perl?
osfameron
 
PDF
JavaScript ES6
Leo Hernandez
 
PDF
Swift Rocks #2: Going functional
Hackraft
 
PDF
Kotlin for Android Developers
Hassan Abid
 
PDF
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
Wanbok Choi
 
PDF
An Intro To ES6
FITC
 
ODP
EcmaScript 6
Manoj Kumar
 
PDF
ECMAScript 6
Piotr Lewandowski
 
PDF
Simulator customizing & testing for Xcode 9
Bongwon Lee
 
PDF
C++ Programming - 5th Study
Chris Ohk
 
PDF
The Lesser Known Features of ECMAScript 6
Bryan Hughes
 
PDF
Kotlin Backstage
Mitchell Tilbrook
 
PDF
dplyr
Romain Francois
 
PDF
미려한 UI/UX를 위한 여정
SeungChul Kang
 
PDF
Mozilla とブラウザゲーム
Noritada Shimizu
 
PPTX
Kotlin Collections
Halil Özcan
 
PPT
Functional Pe(a)rls version 2
osfameron
 
Elm introduction
Mix & Go
 
Functional Pe(a)rls - the Purely Functional Datastructures edition
osfameron
 
Is Haskell an acceptable Perl?
osfameron
 
JavaScript ES6
Leo Hernandez
 
Swift Rocks #2: Going functional
Hackraft
 
Kotlin for Android Developers
Hassan Abid
 
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
Wanbok Choi
 
An Intro To ES6
FITC
 
EcmaScript 6
Manoj Kumar
 
ECMAScript 6
Piotr Lewandowski
 
Simulator customizing & testing for Xcode 9
Bongwon Lee
 
C++ Programming - 5th Study
Chris Ohk
 
The Lesser Known Features of ECMAScript 6
Bryan Hughes
 
Kotlin Backstage
Mitchell Tilbrook
 
미려한 UI/UX를 위한 여정
SeungChul Kang
 
Mozilla とブラウザゲーム
Noritada Shimizu
 
Kotlin Collections
Halil Özcan
 
Functional Pe(a)rls version 2
osfameron
 

Similar to Why Kotlin is your next language? (20)

PPTX
Introduction to Kotlin Language and its application to Android platform
EastBanc Tachnologies
 
PDF
Kotlin, smarter development for the jvm
Arnaud Giuliani
 
PDF
Lightning talk: Kotlin
Evolve
 
PDF
A quick and fast intro to Kotlin
XPeppers
 
PPTX
Kotlin – the future of android
DJ Rausch
 
PPTX
Why kotlininandroid
Phani Kumar Gullapalli
 
PDF
Little Helpers for Android Development with Kotlin
Kai Koenig
 
PDF
Kotlin: Why Do You Care?
intelliyole
 
PDF
Kotlin @ Devoxx 2011
Andrey Breslav
 
PDF
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
PDF
Summer of Tech 2017 - Kotlin/Android bootcamp
Kai Koenig
 
PDF
2022 May - Shoulders of Giants - Amsterdam - Kotlin Dev Day.pdf
Andrey Breslav
 
PDF
Kotlin: A pragmatic language by JetBrains
Jigar Gosar
 
PPTX
Nice to meet Kotlin
Jieyi Wu
 
PDF
Kotlin a problem solver - gdd extended pune
Hardik Trivedi
 
PPTX
Android & Kotlin - The code awakens #03
Omar Miatello
 
PDF
Having Fun with Kotlin Android - DILo Surabaya
DILo Surabaya
 
PDF
Develop your next app with kotlin @ AndroidMakersFr 2017
Arnaud Giuliani
 
PDF
2017: Kotlin - now more than ever
Kai Koenig
 
PDF
Coding for Android on steroids with Kotlin
Kai Koenig
 
Introduction to Kotlin Language and its application to Android platform
EastBanc Tachnologies
 
Kotlin, smarter development for the jvm
Arnaud Giuliani
 
Lightning talk: Kotlin
Evolve
 
A quick and fast intro to Kotlin
XPeppers
 
Kotlin – the future of android
DJ Rausch
 
Why kotlininandroid
Phani Kumar Gullapalli
 
Little Helpers for Android Development with Kotlin
Kai Koenig
 
Kotlin: Why Do You Care?
intelliyole
 
Kotlin @ Devoxx 2011
Andrey Breslav
 
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
Summer of Tech 2017 - Kotlin/Android bootcamp
Kai Koenig
 
2022 May - Shoulders of Giants - Amsterdam - Kotlin Dev Day.pdf
Andrey Breslav
 
Kotlin: A pragmatic language by JetBrains
Jigar Gosar
 
Nice to meet Kotlin
Jieyi Wu
 
Kotlin a problem solver - gdd extended pune
Hardik Trivedi
 
Android & Kotlin - The code awakens #03
Omar Miatello
 
Having Fun with Kotlin Android - DILo Surabaya
DILo Surabaya
 
Develop your next app with kotlin @ AndroidMakersFr 2017
Arnaud Giuliani
 
2017: Kotlin - now more than ever
Kai Koenig
 
Coding for Android on steroids with Kotlin
Kai Koenig
 
Ad

Recently uploaded (20)

PPTX
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
PDF
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
PPTX
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
PDF
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
PDF
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PPTX
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 
PDF
Executive Business Intelligence Dashboards
vandeslie24
 
PPTX
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
PPTX
The Role of a PHP Development Company in Modern Web Development
SEO Company for School in Delhi NCR
 
PPTX
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Engineering the Java Web Application (MVC)
abhishekoza1981
 
PPTX
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 
Executive Business Intelligence Dashboards
vandeslie24
 
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
The Role of a PHP Development Company in Modern Web Development
SEO Company for School in Delhi NCR
 
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Engineering the Java Web Application (MVC)
abhishekoza1981
 
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Ad

Why Kotlin is your next language?

  • 1. Why Kotlin is your next language? theory and practice Aliaksei Zhynhiarouski 1 Dev Day MiniQ, 2016
  • 3. Why is Kotlin • Static Typing bit.ly/st-vs-dyn • Java + Kotlin = ❤. 
 Effortless mixing both in one project • Java Interoperability. 
 100% interoperable with Java. 3
  • 4. Why is Kotlin • Null Safety • Type Inference • Immutability in the mind • fun 4
  • 5. fun main(args : Array<String>) { println("Hello, MiniQ!") } 5
  • 6. val from_value : Type var from_variable : Type val i_am_string = “mobile” var i_am_long = 666L val i_am_double = 3.14e10 6 val & var
  • 7. Null Safety // can’t be null
 val foo: String = “Dev Day” 
 // need always perform the check 
 val bar: String? = null 7 Type? = Type or null
  • 8. Null Safety val bar: String? = “Dev Day” 
 var a = bar?.length // 6
 
 var b = bar?.length?.inc() // 7
 
 var c = bar!!.length // can be NPE 8
  • 9. Null Safety val bar: String? = null 
 var a = if (bar != null) bar.length
 else 0 // 0
 
 var b = bar?.length ?: 0 // 0
 9
  • 10. Type Definition class Phone(val brand: String) 10 • concise syntax for constructor • properties – not fields • final by default. Use open to open • simple old java class under the hood
  • 11. Type Definition class Phone(val brand: String){ var version: Int = 0 } 11 get() {…}
 private set val phone = Phone(“Apple”)
 phone.brand == “Apple” // true
  • 12. Value Object data class Phone(val brand: String) 12 toString() hashCode() equals()
 copy()
  • 13. Get ready to be inspired 13
  • 14. Extensions 14 // Usage Example
 
 “MiniQ”.lastChar() // “Q”
 // Definition
 
 fun String.lastChar():Char 
 = this.get(length - 1)
  • 15. Extensions 15 // Java under the hood
 
 @file:JvmName(“StringUtils")
 StringUtils.lastChar(“Mobile”);
  • 17. Extensions 17 operator fun BigDecimal.inc() 
 = this + BigDecimal.ONE 
 // Example
 var counter = BigDecimal.ZERO
 
 print(++counter) // 1
  • 19. Android Extensions 19 val text = find<TextView>(R.id.text) Just extend Activity and have fun inline fun <reified T : View> 
 Activity.find(id: Int): T = this.findViewById(id) as T final TextView text = (TextView) v.findViewById(R.id.text);
  • 20. Lambdas 20 val boys = listOf(
 Boy(“Alex”), Boy(“Petr”), Boy(“Oleg”))
 // 1 
 boys.filter({ b: Boy -> b.age > 18 })
 // 2
 boys.filter({ it.age > 18 }) 
 // 3
 boys.filter { it.age > 18 }
  • 21. λ 21 boys.filter { it.age > 18 } .map { Pair(it, Boy("Eugene")) } .forEach { dance(it) } // Definition
 
 inline fun <T> Iterable<T>.filter
 (predicate: (T) -> Boolean)

  • 22. λ 22 db.inTransaction {
 delete(“users”, “name = ?”, arrayOf(“Alex”))
 } fun SQLiteDatabase.inTransaction(func: SQLiteDatabase.() -> Unit) { beginTransaction() try {
 func()
 setTransactionSuccessful() } finally { endTransaction() } }
  • 23. Delegates – right way 23 class View {
 
 
 
 
 
 
 
 } val lazyProp by lazy { “Dev Day” } val ops by observable(“”) { 
 prop, old, new -> print("$old to $new") }
  • 24. Delegates – wow way 24 class Activity {
 
 
 
 
 
 
 } private val btn: Button by lazy {
 findViewById(R.id.btn) as Button
 }
 
 override fun onCreate(savedBundle: Bundle?) {
 btn.setText(“MiniQ!”)
 } 

  • 25. Delegates – wow way 25 class Query(val props: Map<String, String>) {
 
 } val category by props
 val model by props
 
 val info: String
 get() {
 return “$category - $model” 
 }
  • 26. Delegates – wow way 26 class Query(val props: Map<String, String>) {
 
 } val category by props
 val model by props
 …
 val props = mapOf(“category” to “XXX”,
 “model” to “YYY”)
 val query = Query(props) print(query.info) // “XXX - YYY”

  • 27. DSL 27 • Type-safe • Express your code by flexible syntax • Ideal to build own query engine • if/for/when just inside DSL
  • 28. DSL 28 "(#C1 = :active) AND (#C2 = :type) AND " + "(attribute_not_exists(#C1) OR #C1 IN (:model, :allModels)) AND " +
 "...";
 if (smth)
 append("(#C2 = :active) AND NOT contains(#C3, :brandAll)"); … // wait, oh shi~
  • 29. DSL 29 val expr = filterExpr {
 group {
 eq("#1", ":2") and eq("#1", ":2") 
 or group {
 eq("#2", ":2")
 if (smth) { 
 and eq("#2", ":2") 
 }
 }
 and ……
 }
  • 30. One more DSL thing 30 Gradle 3 meets Kotlin
  • 31. Kotlin 1.1 typealias Callback<T> = (T) -> T // And now
 fun alias(cb: Callback<String>) {} 31 Type aliases
  • 32. Kotlin 1.1 typealias Table<K> = 
 
 MutableMap<K, MutableList<String>> 32 Type aliases
  • 33. Kotlin 1.1 val future = async<String> { (1..5).map { await(loooongAsyncOperation(it))
 
 }.joinToString("n") } 33 Coroutines with async/await
  • 34. Why is Kotlin • Use all existing Java frameworks and libraries • Code reviews are not a problem • Suitable for enterprise Java • Adopting is low risk 34
  • 35. Why is Kotlin • Android • Gradle • Can be learned in a few hours • Kotlin also compiles to JavaScript ;) 35
  • 38. Links just for you Kotlin compilation speed Performance: Kotlin Bytecode https://www.youtube.com/watch?v=eQ4YHpAXdp4 Experience of Square with Kotlin. Good analysis Android Development advanced https://vimeo.com/144877458 Kotlin in real project with a lot of nuances https://www.youtube.com/watch?v=CABN2r4GPpQ 38
  • 40. Go v Minsk, ja sozdal