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

Kotlin: Next Level of Android Development

Kotlin: Next Level of Android Development

i gave a talk on kotlin as the big language when comes to Android Developement

5711a187d80c7009bbb5266a7aa8fd67?s=128

Umar Saidu Auna

June 08, 2019
Tweet

Transcript

  1. Umar Saidu Auna, @umarauna otlin: Next level of Android Development

    June 8, 2019
  2. Who am I? I

  3. otlin history

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

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

    Kotlin was developed by JetBrains (Makers of IntelliJ)
  6. 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.
  7. 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
  8. otlin What?

  9. 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.
  10. 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).
  11. 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
  12. 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
  13. otlin interesting features

  14. “In Kotlin, everything is an object (reference type), we don’t

    find primitives types as the ones we can use in Java……...”
  15. #1 Fastest growing language

  16. Companies Using Kotlin

  17. Companies Using Kotlin

  18. Job requirements

  19. Kotlin sample code….. fun main(args: Array<String>){ //your code goes here

    }
  20. As of Kotlin 1.3 no more (args: Array<String>) fun main(){

    //your code goes here }
  21. None
  22. None
  23. Null Safety - nullable types and non-nullable types Protects against

    NullPointerException the $1,000,000,000 mistake
  24. 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
  25. 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
  26. None
  27. 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
  28. 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.
  29. 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
  30. 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”
  31. 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!!!
  32. 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.
  33. String Interpolation in Kotlin fun hello(name: String) { println("Hello, $name")

    }
  34. String Interpolation in Java + Kotlin void hello(String name) {

    System.out.println("Hello, " + name); }
  35. None
  36. 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
  37. Immutability How does it work in Java? • Immutability in

    Java? final classes private fields no setters • Immutability in Kotlin? Guess?
  38. 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()
  39. 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
  40. 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)
  41. None
  42. Functions // function sample fun sampleFunc() { // code goes

    here } A function is declared using the “fun” keyword
  43. 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
  44. 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.
  45. Functions - infix functions // infix function infix fun Int.times(x:

    Int): Int { return this * x }
  46. 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) }
  47. Functions - extension functions // extension function fun Int.square(): Int

    { return this * this }
  48. Functions - extension functions // extension function fun Int.square(): Int

    { return this * this } fun useExtension() { val square = 2.square() println(square) }
  49. Functions Others: • Higher order functions • Lambdas • Inline

    functions etc.
  50. None
  51. Iterators Java Kotlin

  52. When Expression

  53. otlin conciseness

  54. Conciseness in Kotlin public void doSomething() { // do something

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

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

    } fun doSomething() { // do same thing }
  57. Conciseness in Kotlin public String getName() { return name; }

    fun getName(): String { return name }
  58. Conciseness in Kotlin public String getName() { return name; }

    fun getName() { return name }
  59. Conciseness in Kotlin public String getName() { return name; }

    fun getName() = name
  60. otlin classes

  61. 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)
  62. 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 } }
  63. 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 }
  64. otlin: getting started

  65. Important place to learn…….

  66. Important place to learn……. Tutorials Point - Kotlin

  67. Important place to learn……. Tutorials Point - Kotlin Kotlin for

    Android Developers – Antonio Leiva
  68. Important place to learn……. Tutorials Point - Kotlin Kotlin for

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

    Android Developers – Antonio Leiva Koans online – try.kotl.in/koans Kotlin Bootcamp for Programmers - Udacity
  70. Compilations

  71. None
  72. IDE’s

  73. Build Tools

  74. Stay updated……. Kotlin Weekly http://www.kotlinweekly.net/ Kotlin Conf kotlinconf.com

  75. 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
  76. otlin: libraries

  77. Reduces Boilerplates codes like: findViewById, Async, build interfaces with Kotlin

    code etc
  78. 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.
  79. Async Server - Client

  80. https://kotlinlang.org/user-groups/user-group-list.html @kanokotlin

  81. Finally 1 You have 3 Options.. Decide Kotlin is not

    For you and continue with Java
  82. Finally 1 You have 3 Options.. Decide Kotlin is not

    For you and continue with Java Try to learn everything on your own 2
  83. 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
  84. Thank you! @umarauna @android200