Upload
tomislav-homan
View
476
Download
0
Embed Size (px)
Citation preview
Intro to Kotlin
15.10.2015@Infinum Dino Sulić & Tomislav Homan
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Java on Android - the bad parts
● Java 7 was out 2011. - partial support 2013.
● Java 8 was out 2014. - no support announced in the near future
● Null references
● Covariant arrays
● Raw types
● SAM types
● Checked exceptions
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Alternatives to Java● Xtend - Nice try, but very hard to work with in practice because
of IDE support
● Scala - We are engineers with deadlines, not scientists. Also 80k
methods
● Groovy - Very nice, but not type safe and adds over 30k methods.
IMHO best alternative - to our alternative :)
● Closure, etc, etc…
● Kotlin
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Advantages of Kotlin (I)● Modern statically typed, object oriented language that borrows
many ideas from functional languages
● Fast learning curve - inspired by Scala and C#. Scaled down
Scala :)
● Meant to be used for building large software systems
● Engineered to be highly interoperable with Java - you can use
existing code base w/o (many) problems
Advantages of Kotlin (II)● The team behind it is JetBrains, creators of IntelliJ which is
Android Studio based on. Also has some contributions from
James Strachan - creator of Groovy
● Significantly more concise and readable than Java, which means
it’s easier to maintain
● Lightweight - Kotlin stdlib has 8k methods
● If it means something to someone - it also compiles to
Javascript
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
(Possible) disadvantages (I)● Code generation - After a long struggle works with, for now,
limited support - Dagger 2 works
● Mocking and testing - managed to run AndroidTestCase with
Mockito, but no serious testing done
● IDE was still bit unstable few months ago, but it seems fine now
and it can only get better. But still be patient for now
(Possible) disadvantages (II)● Java could break when using immutable collections returned
from Kotlin code
● New language that still evolves - teams need to establish code
conventions - still no "Effective Kotlin" :)
● Interoperability with new Jack and Jill compiler - should be all
right, but we have to monitor the situation
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Features
Selection of features compared to Java
First thing that one will notice is function declaration includes keyword fun
Functions (I)
Parameter types are defined in Scala (Or Swift) way
Functions (II)
Default parameters come in handy
Functions (III)
Named parameters as a good substitution for builders
Functions (IV)
Functions are first-class Kotlin citizens
Functions (V)
Lambdas on Android? Not using Java
Functions (VI)
Lambdas on Android? Kotlin has them
Functions (VII)
Nice Retrofit example - cumbersome using Java
Functions (VIII)
Nice Retrofit example - pretty decent using Kotlin
Functions (IX)
Utility methods vs. extension functions
Functions (X)
Kotlin inferes types
Types (I)
It is difficult to write “final”. Kotlin makes it easier with val keyword
Types (II)
Java fields become Kotlin property. No need for getter / setters unless you want to override them
Properties (I)
If you have the need for some validation…
Properties (II)
...you can still override accessors and access backing field
Properties (III)
Nothing to say here
Null safety (I)
You have to explicitly use nullable type if you want to allow nulls
Null safety (II)
If you use nulls though, safe calls, Elvis and smart casts are here to help
Null safety (III)
Explicit vs. smart casts
Casting
In order to make this business logic right….
Data classes (I)
You have to do some work
Data classes (II)
In order to make this business logic right….
Data classes (III)
...you use data modifier
Data classes (IV)
Typical data repository
Collections (I)
Some business logic
Collections (II)
And lots of error prone work
Collections (III)
Same typical repository
Collections (IV)
Some business logic. Collections are really immutable
Collections (V)
But much less work
Collections (VI)
Just one more example...
Various (I)
...how Kotlin gets some things better
Various (II)
Out of scope● Generics - variance, covariance, contravariance
● Annotations
● Reflection
● Operator overloading
● Type-safe builders
● Dynamic types
● Java interop
● …and lot more
● http://kotlinlang.org/docs/reference/
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Migration to Koltin● https://kotlinlang.org/docs/tutorials/kotlin-android.html
● Use convert code option - but check thoroughly afterwards
● Use clean code option after upgrading Kotlin version
● KotlinFrontEndException
● > sudo find . -name ".DS_Store" -depth -exec rm {} \;
● This list was much longer few months ago