Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin: what you need to know

Kotlin: what you need to know

I gave a talk at Kotlin Night Kano on how you get started with Kotlin

Umar Saidu Auna

April 27, 2019
Tweet

More Decks by Umar Saidu Auna

Other Decks in Programming

Transcript

  1. History Statically typed programming language, and runs on the JVM.

    Kotlin was developed by JetBrains (Makers of IntelliJ)
  2. History Statically typed programming language, and runs on the JVM.

    Kotlin was developed by JetBrains (Makers of IntelliJ) First commit dates back to 2010, but was first publicly seen around 2011.
  3. History - Why did Google make it official? Awesome features

    - nullable types, concise, data classes, etc. Great community support There was an overwhelming request for Kotlin official support on Android
  4. What is Kotlin Kotlin is an expression-oriented language, it is

    also JVM based language developed by JetBrains as described before, a company known for the creation of IntelliJ IDEA, a powerful IDE for Java development. In Kotlin everything is an Object.
  5. What is Kotlin Kotlin is an expression-oriented language, it is

    also JVM based language developed by JetBrains as described before, a company known for the creation of IntelliJ IDEA, a powerful IDE for Java development. In Kotlin everything is an Object. Kotlin is very intuitive and easy to learn for Java developers (give it 10 days trials and you wont regret).
  6. What is Kotlin Kotlin is an expression-oriented language, it is

    also JVM based language developed by JetBrains as described before, a company known for the creation of IntelliJ IDEA, a powerful IDE for Java development. In Kotlin everything is an Object. Kotlin is very intuitive and easy to learn for Java developers (give it 10 days trials and you wont regret) . Its more expressive & safer
  7. What is Kotlin Kotlin is an expression-oriented language, it is

    also JVM based language developed by JetBrains as described before, a company known for the creation of IntelliJ IDEA, a powerful IDE for Java development. In Kotlin everything is an Object. Kotlin is very intuitive and easy to learn for Java developers (give it 10 days trials and you wont regret). Its more expressive & safer Its highly interoperable
  8. “In Kotlin, everything is an object (reference type), we don’t

    find primitives types as the ones we can use in Java……...”
  9. Null Safety - nullable types and non-nullable types Protects against

    NullPointerException the $1,000,000,000 mistake
  10. Null Safety - nullable types and non-nullable types Protects against

    NullPointerException the $1,000,000,000 mistake // compiler error var name: String A non-nullable object can’t be null name = null
  11. Null Safety - nullable types and non-nullable types Protects against

    NullPointerException the $1,000,000,000 mistake // compiler error var name: String A non-nullable object can’t be null name = null // compiler error Specify a nullable object by using “?” var name: String? val length = name.length Kotlin ensures that you don’t mistakenly operate on nullable objects
  12. Null Safety - Accessing properties in a nullable object 1.

    Checking for null types // handle non-null case and null case var name: String? = null val length = if (name != null) name.length else 0
  13. Null Safety - Accessing properties in a nullable object 2.

    Making safe calls using “?.” //use ?. to make safe call var name: String? ... val length = name?.length Use ?. to safely access a property/method on a nullable object If name happens to be null, the value of length is 0 (inferred integer). length would be null if it were of another type.
  14. Null Safety - Accessing properties in a nullable object 3.

    Making use of the “?:” elvis operator //use elvis operator var name: String? val length = name?.length ?: 0 This reads as “if name is not null, use name.length else use 0
  15. Null Safety - Accessing properties in a nullable object 4.

    Making use of the “!!” assertion operator //use elvis operator var name: String? = null val length = name!!.length This reads as “if name is not null, use name.length else throw a null pointer exception”
  16. Null Safety - Accessing properties in a nullable object 4.

    Making use of the “!!” assertion operator //use elvis operator var name: String? = null val length = name!!.length This reads as “if name is not null, use name.length else throw a null pointer exception” Be very careful with this operator!!!
  17. Null Safety - NPE free! You can only have the

    NullPointerException in Kotlin if: 1. You explicitly throw a NPE 2. You make use of the !! operator 3. An external Java code causes the NPE.
  18. String Interpolation in Java + Kotlin void hello(String name) {

    System.out.println("Hello, " + name); }
  19. Immutability Kotlin helps developers to be intentional about immutability. Immutability

    simply means that things you create can’t be changed. We need immutability because it: • helps us with thread safety - no synchronization issues • is good for value objects - objects that simply hold value, POJOs etc. • helps debugging threaded applications without losing your hair
  20. Immutability How does it work in Java? • Immutability in

    Java? final classes private fields no setters • Immutability in Kotlin? Guess?
  21. Immutability How does Kotlin help? var vs val // compiler

    error: val cannot be reassigned val name = "Umar" name = name.toUpperCase() // works fine var name = "Umar" name = name.toUpperCase()
  22. Immutability How does Kotlin help? Immutable and Mutable collections //

    immutable collection val unchangeableHobbies = listOf("coding", "eating") unchangeableHobbies.add() // add method doesn’t exist // mutable collection val changeableHobbies = mutableListOf("reading", "running") changeableHobbies.add("volleyball") // you can add
  23. Immutability In Java vs Kotlin public final class ImmutableClassJava {

    private final String name; private final int age; public ImmutableClassJava(String name, int age) { this.name = name; this.age = age; } // no setters public String getName() { return name; } public int getAge() { return age; } } class ImmutableClass(val name: String, val age: Int, val grade: Char, val hobbies: List<String>) • Class is final by default • val implies that the parameters are final as well (values can’t be assigned)
  24. Functions // function sample fun sampleFunc() { // code goes

    here } A function is declared using the “fun” keyword
  25. Functions // function sample fun sampleFunc() { // code goes

    here } // function with param fun sampleFuncWithParam(param: String) { // code goes here } A function is declared using the “fun” keyword Method parameters use the “name:Type” notation
  26. Functions // function sample fun sampleFunc() { // code goes

    here } // function with param fun sampleFuncWithParam(param: String) { // code goes here } // func with param and return type fun capitalize(param: String): String { return param.toUpperCase() } A function is declared using the “fun” keyword Method parameters use the “name:Type” notation Return types are specified after the method definition.
  27. Functions - infix functions // infix function infix fun Int.times(x:

    Int): Int { return this * x } // usage fun useInfix() { val product = 2 times 5 println(product) }
  28. Functions - extension functions // extension function fun Int.square(): Int

    { return this * this } fun useExtension() { val square = 2.square() println(square) }
  29. Conciseness in Kotlin public void doSomething() { // do something

    } fun doSomething(): Unit { // do same thing }
  30. Conciseness in Kotlin public void doSomething() { // do something

    } fun doSomething(): Unit { // do same thing }
  31. Classes in Java vs Data Classes in Kotlin public class

    Person { private String name; String getName () { return name; } void setName (String name) { this.name = name; } @Override public String toString () { return "Person{" + "name='" + name + '\'' + '}'; } } data class Person(val name: String)
  32. Classes in Java vs Regular Classes in Kotlin public class

    Person { private String name; String getName () { return name; } void setName (String name) { this.name = name; } public int getNameLength () { return name.length } } class Person(name: String) { var name: String get() = name set(name) { this.name = name } fun getNameLength(): int { return name.length } }
  33. Classes in Java vs Regular Classes in Kotlin public class

    Person { private String name; String getName () { return name; } void setName (String name) { this.name = name; } public int getNameLength () { return name.length } } class Person(name: String) { var name: String get() = name set(name) { this.name = name } fun getNameLength() = name.length }
  34. Important place to learn……. Tutorials Point - Kotlin Kotlin for

    Android Developers – Antonio Leiva Koans online – try.kotl.in/koans
  35. Important place to learn……. Tutorials Point - Kotlin Kotlin for

    Android Developers – Antonio Leiva Koans online – try.kotl.in/koans Kotlin Bootcamp for Programmers - Udacity
  36. Summary • Interoperable with Java (100%) • Reduces Boilerplate code

    • Object-Oriented and procedural • Safety code • No Semicolon • Expands your skillset • Perfect Support with Android Studio & Gradle • Very easy to get started with Android Development
  37. Kotlin Android Extension it includes a view binder. The plugin

    automatically creates a set of properties that give direct access to all the views in the XML.
  38. Finally 1 You have 3 Options.. Decide Kotlin is not

    For you and continue with Java Try to learn everything on your own 2
  39. Finally 1 You have 3 Options.. Decide Kotlin is not

    For you and continue with Java 3 Go and learn on MOOC websites Try to learn everything on your own 2