Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Kotlin and why you should love it #1
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Roberto Orgiu
June 23, 2017
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin and why you should love it #1
Introductory slides about Kotlin
Roberto Orgiu
June 23, 2017
More Decks by Roberto Orgiu
See All by Roberto Orgiu
Wellness & Droid
tiwiz
0
140
Behind the curtains
tiwiz
0
94
The Importance of Being Tested
tiwiz
0
450
An Android Dev start to Kotlin MPP
tiwiz
0
210
Fantastic API and where to find them
tiwiz
0
110
Flipping the Koin @ GDG Dev Party
tiwiz
1
83
Flipping the Koin
tiwiz
2
190
Trip into the async world @ NYC Kotlin Meetup
tiwiz
0
130
Trip into the async world
tiwiz
1
160
Other Decks in Programming
See All in Programming
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
170
Webの地図
yosuke_furukawa
PRO
3
3.3k
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
高専キャリア LT 発表内容
crysta1221
6
5.6k
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
100
自分的「カンファレンスの楽しみ方」
syumai
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
130
業務時間外もAIに働いてもらう話
colorful12
3
10k
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
190
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
新卒PdEのリアル
ryu1013
1
470
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Mind Mapping
helmedeiros
1
350
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Being A Developer After 40
akosma
91
590k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Abbi's Birthday
coloredviolet
3
9.9k
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!