Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin and why you should love it #1
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Roberto Orgiu
June 23, 2017
Programming
0
92
Kotlin and why you should love it #1
Introductory slides about Kotlin
Roberto Orgiu
June 23, 2017
Tweet
Share
More Decks by Roberto Orgiu
See All by Roberto Orgiu
Wellness & Droid
tiwiz
0
120
Behind the curtains
tiwiz
0
67
The Importance of Being Tested
tiwiz
0
420
An Android Dev start to Kotlin MPP
tiwiz
0
180
Fantastic API and where to find them
tiwiz
0
77
Flipping the Koin @ GDG Dev Party
tiwiz
1
74
Flipping the Koin
tiwiz
2
160
Trip into the async world @ NYC Kotlin Meetup
tiwiz
0
120
Trip into the async world
tiwiz
1
140
Other Decks in Programming
See All in Programming
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
150
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
130
How to stabilize UI tests using XCTest
akkeylab
0
140
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
670
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
CSC307 Lecture 14
javiergs
PRO
0
480
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
Rethinking API Platform Filters
vinceamstoutz
0
140
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
150
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
900
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
380
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
290
Featured
See All Featured
Marketing to machines
jonoalderson
1
5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
We Have a Design System, Now What?
morganepeng
55
8k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
310
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Odyssey Design
rkendrick25
PRO
2
550
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
430
How to Talk to Developers About Accessibility
jct
2
160
Transcript
KOTLIN AND WHY YOU SHOULD LOVE IT
WHAT IS KOTLIN? > Compatible with JVM (and moar) >
Made by Jetbrains > More expressive > Safer > Functional > Uses Extension Functions > Highly interoperable
NULLABLE VS NONNULL > They are different types > Compile
time error if you assign null to a non null variable > No more NullPointerException !
NULLABLE VS NONNULL > val name: String = null ❌
> val name: String = "Roberto" ✔ > val name: String? = null ✔
NULLABLE VS NONNULL (INTEROPERABILITY) > Calling Java from Kotlin ➡
Nullable > Unless it's annotated with @NonNull / @NotNull
SMART CAST void function(Object something) { if(something instanceof String) {
String s = (String) something; println(s.substring(0, 3)) } }
SMART CAST fun function(something: Any) { if(something is String) {
println(something.substring(0, 3)) } }
if you need explicit casting... pluto as Dog
DECLARING A CLASS class Person { ... }
DECLARING A CLASS class Person (name : String, surname :
String?)
DECLARING A CLASS class Person (name : String, surname :
String?) { init { //code common to every constructor } }
DECLARING A CLASS class Person (name : String, surname :
String?) { constructor(name: String){ this(name, null) } init { //code common to every constructor } }
DECLARING A CLASS class Person (name : String, surname :
String? = null) { init { //code common to every constructor } }
CREATING AN INSTANCE > val p = Person("Pippo") > val
p2 = Person("Pippo", "Goofy")
CALLING A METHOD ON A NULLABLE TYPE val p =
Person("Pippo") val fifthCharOfSurname: Char? = p.surname?.charAt(4) //this is nullable type fifthCharOfSurname?.doSomething() //executed only if not null
NULLABLE TYPES IN JAVA Person p = new Person("Pippo", null);
String surname = p.getSurname(); if (surname != null) { Char fifthCharOfSurname = surname.charAt(4); if (fifthChar != null) { fifthCharOfSurname.doSomething(); } }
INHERITANCE class Person (name : String, surname : String) :
Animal (name) { ... }
INTERFACES interface OnClickListener { fun onClick(v : View) }
INTERFACES AND DEFAULT METHODS interface OnClickListener { fun onClick(v :
View) = println("I've been clicked") }
FUNCTIONS fun onCreate(savedInstanceState: Bundle?) { ... }
FUNCTIONS fun add(x : Int, y : Int) : Int
{ return x + y }
FUNCTIONS fun add(x : Int, y : Int) : Int
= x + y
FUNCTIONS fun add(x : Int, y : Int) = x
+ y
FUNCTIONS fun add(x : Int = 1, y : Int
= 2) = x + y
STRING TEMPLATES val s1 = "Hello, $who" val s2 =
"Hello, ${person.name}"
VARIABLES > No implicit conversion: everything must be converted >
Chars are not Ints, but we can convert them > Bitwise: | is or, & is and > Type can be inferred > Strings can be accessed as arrays
VARIABLES IMMUTABLE VS MUTABLE
VARIABLES val VS var
VARIABLES val a = 42 a = 43 // No
can do! var b = "hello" b = "ciao" // Yeah can do var c : Context = this
VARIABLES class Person { var name : String = ""
get() = field.toUppercase() set(value) { field = "Name: $value" } }
CONTROL FLOW
everything returns something
if val max = if (a > b) a else
b
fun resultBasedOnCondition(condition: Boolean) { return if (condition) "A" else "B"
}
when val type = when(fido) { is Dog -> "Dog"
is Cat -> "Cat" else -> error("I only know about dogs and cats") }
DATA CLASSES data class Person (val name : String, val
lastName : String)
DATA CLASSES GIVE US > equals() > hashCode() > copy()
EXTENSION METHODS //file Extension.kt fun Dog.bark() { ... } pluto.bark()
fido.bark()
EXTENSION METHODS and how they are converted in Java static
void bark(Dog dog) { ... } ExtensionKt.bark(pluto) ExtensionKt.bark(fido)
EXTENSION METHODS CAN BE DECLARED AS LOCAL FUNCTIONS
LAMBDAS
LAMBDAS ANONYMOUS FUNCTIONS FOR EVERYONE
JAVA view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {
doSomething(); } });
KOTLIN view.setOnClickListener(object : OnClickListener() { override fun onClick(v : View)
{ doSomething() } })
KOTLIN WITH LAMBDAS view.setOnClickListener({ view -> doSomething() })
KOTLIN WITH LAMBDAS view.setOnClickListener({ doSomething() })
KOTLIN WITH LAMBDAS view.setOnClickListener() { doSomething() }
KOTLIN WITH LAMBDAS view.setOnClickListener { doSomething() }
INLINE FUNCTIONS
INLINE FUNCTIONS they will be substituted by their code during
compilation, instead of doing the real call to a function. inline fun <T> with(t: T, body: T.() -> Unit) { t.body() }
HOW TO MAKE AN INLINE FUNCTION inline fun ifIsLollipop(code :
() -> Unit) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { code() } }
THEN ifIsLollipop { window.setStatusBarColor(Color.BLACK) }
THANKS!