17

Kotlin presentation

Embed Size (px)

Citation preview

Page 1: Kotlin presentation
Page 2: Kotlin presentation

Who am I?

Corneliu Balaban

Mobile Engineering Manager @ Avira Romania Android aficionado with BI background Catching up on the “Kotlin for iOS” – Swift Passionate about BioMedical and AgriTech

Page 3: Kotlin presentation

What is this … Kotlin?

It is a Russian Island close to St. Petersburg

Initially belong to Sweden but after Russia annexed it and …

Inspired the name for a new programming language running in the JVM

Created by JetBrains, creators of PhpStorm, WebStorm, PyCharm etc

Ads small overhead to the Android dev env and dex method count increase by ~6k methods

Page 4: Kotlin presentation

What have we been missing in Java?

No need for functional interfaces in order to implement own higher functions and lambda’s

Embedded lists iterators and mapping functions Class extensions (well… Swift has them) Strongly typed with inferred data types No elegant ways of avoiding NPE’s

Page 5: Kotlin presentation

Basic Kotlin syntax

fun sayHello(name: String): Unit { print("Hello ${name}!" + "Welcome to Bucharest Mobile Meetup");}

ORfun sayHello(name: String): Unit = print("Hello ${name}!" + "Welcome to Bucharest Mobile Meetup");

OR

fun sayHello(name: String) = print("Hello ${name}!" + "Welcome to Bucharest Mobile Meetup");

Page 6: Kotlin presentation

OOP concepts

Kotlin classes

Inherit from Java’s equivalent of Object Any By default are final Inheritance is enabled by prefixing the class with "open" Primary constructor is embedded in the class signature . It

cannot contain any code Secondary constructors are available. Need to delegate to

primary constructor init() methods come to the rescue Immutable variables are represented by the prefix "val" and

can have inferred data type

Page 7: Kotlin presentation

OOP concepts

Good ol' "bean" Easily accessible via "data classes" Makes a good separation of code if you want some

objects that just need to hold data Can make use of companion objects to hold “static”

values

Page 8: Kotlin presentation

More OOP …

Java developers love to be "static" Bad luck, there are no class level methods "Companion objects" are the new black

Used to replicate "statics" behavior in Kotlin Can be one per class

Static variables are not available other than via " companion objects

Page 9: Kotlin presentation

var, val … do I need to know them?

Immutable objects/ variables are prefixed with "val" Can be initialized at declaration time. No data type needed as

inference works as a charm If they cannot be initialized at declaration time then data type is

mandatory Are there other kinds of immutable objects?

var toDoList1: List<ToDoModel> = listOf(ToDoModel(name="Buy Milk"), ToDoModel(name="Buy Weed"));

• var toDoList: MutableList<ToDoModel> = mutableListOf()

Page 10: Kotlin presentation

If val reffers to immutable, do I have project level constants

Compile time constants are defined using the prefix "const”

Cannot have a custom getter Can be used in annotations Can only be of type String or another

primitive Can or cannot be part of a class/ object

Immutable and mutable properties have intrinsic get and set methods

You can customize the visibility of the setter and or getter as well as their behavior

Since properties need to be assigned values at compile time, the only way to define properties that can receive runtime values is by using the prefix "lateinit"

Page 11: Kotlin presentation

Optionals & null safe accessors

Swift has them so why not Kotlin as well They are some weird implementation of

Schroedingers cat Optional properties can contain a value or can be null

Methods can return optionals as well

• To access potentially null variables/ objects you can use ?.• In chaining if at least one of the

conditions is null then the entire chained expression is null

Page 12: Kotlin presentation

Loops, operator overloading and string interpolation

Iterating collections is easier with " for – in " loops . No more of the Java " for – each" nightmare

Range loops are introduces to help us run code for exact number of times " for i in 1 .. 27"

Operator overloading has been made available yet by another language running on top on the JVM ( as did Groovy)

String templates and interpolations are yet another valuable

Page 13: Kotlin presentation

Lambdas and higher order functions

Introduced in Java 8 but cumbersome to use. Why? Cumbersome to introduce as functional interfaces are

needed Not backwards compatible Not really useful for Android developers as we are still

stuck on Java 7 Lambdas are natively supported by Kotlin Kotlin allows methods that can receive other functions

as parameters Also it allows the existence of functions outside classes

which is perfect for utils

Page 14: Kotlin presentation

Extensions

Imagine that "String" would have an … ”getGreetingById" method

Extensions can be used to add custom methods to existing objects

They can be called as : Object. getGreetingById(1)

Very similar to Swift extensions

Page 15: Kotlin presentation

Useful resources

Must try the "anko" library: https://github.com/Kotlin/anko

Get dirty with Kotlin Koans here: http://try.kotlinlang.org/#/Kotlin%20Koans/Introduction/Strings/Task.kt

Try reading Antonio Leiva's Kotlin book: https://leanpub.com/kotlin-for-android-developers

Page 16: Kotlin presentation

Oh, and one more thing …adding Kotlin to your project

Not going through all the steps ;) Check them here:

https://blog.jetbrains.com/kotlin/2013/08/working-with-kotlin-in-android-studio/

Page 17: Kotlin presentation

Q & A