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
100
Behind the curtains
tiwiz
0
46
The Importance of Being Tested
tiwiz
0
390
An Android Dev start to Kotlin MPP
tiwiz
0
140
Fantastic API and where to find them
tiwiz
0
59
Flipping the Koin @ GDG Dev Party
tiwiz
1
46
Flipping the Koin
tiwiz
2
140
Trip into the async world @ NYC Kotlin Meetup
tiwiz
0
90
Trip into the async world
tiwiz
1
110
Other Decks in Programming
See All in Programming
複数アプリケーションを育てていくための共通化戦略
irof
10
3.9k
KotlinConf 2025 現地参加の土産話
n_takehata
0
100
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
2
1k
TypeScript LSP の今までとこれから
quramy
1
510
業務自動化をJavaとSeleniumとAWS Lambdaで実現した方法
greenflagproject
1
120
GoのWebAssembly活用パターン紹介
syumai
3
10k
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
370
A2A プロトコルを試してみる
azukiazusa1
1
350
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
280
ReadMoreTextView
fornewid
1
440
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Designing Experiences People Love
moore
142
24k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Making Projects Easy
brettharned
116
6.2k
Become a Pro
speakerdeck
PRO
28
5.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
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!