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
Roberto Orgiu
June 23, 2017
Programming
0
85
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
110
Behind the curtains
tiwiz
0
51
The Importance of Being Tested
tiwiz
0
400
An Android Dev start to Kotlin MPP
tiwiz
0
160
Fantastic API and where to find them
tiwiz
0
61
Flipping the Koin @ GDG Dev Party
tiwiz
1
54
Flipping the Koin
tiwiz
2
140
Trip into the async world @ NYC Kotlin Meetup
tiwiz
0
98
Trip into the async world
tiwiz
1
120
Other Decks in Programming
See All in Programming
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
290
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
230
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
500
旅行プランAIエージェント開発の裏側
ippo012
2
920
速いWebフレームワークを作る
yusukebe
5
1.7k
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
為你自己學 Python - 冷知識篇
eddie
1
350
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
520
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
180
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
320
AIでLINEスタンプを作ってみた
eycjur
1
230
Design Foundational Data Engineering Observability
sucitw
3
200
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Side Projects
sachag
455
43k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Six Lessons from altMBA
skipperchong
28
4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Typedesign – Prime Four
hannesfritz
42
2.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Context Engineering - Making Every Token Count
addyosmani
3
53
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!