Kotlin presentation
-
Upload
mobileacademy -
Category
Software
-
view
104 -
download
0
Transcript of 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
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
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
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");
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
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
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
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()
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"
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
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
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
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
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
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/
Q & A