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

Почему Android разработчики переходят на Kotlin

Почему Android разработчики переходят на Kotlin

Рассказал почему Android разработчики за последний год активно переходят на язык программирования Kotlin с Java. В чем прелесть этого языка и как выглядели бы код на Java в Kotlin.

Zhanibek Marshal

August 23, 2018
Tweet

More Decks by Zhanibek Marshal

Other Decks in Programming

Transcript

  1. Почему Android разработчики переходят на Kotlin DrinkUp Almaty, 23 Авг.

    2018 Маршал Жанибек Ведущий разработчик Android в kolesa krisha market
  2. Состояние Java на Android • Java bytecode приложения запускаются на

    Dalvik Virtual Machine либо на Android Runtime • Разработчикам доступно JDK 7 по умолчанию
  3. Состояние Java на Android • Java bytecode приложения запускаются на

    Dalvik Virtual Machine либо на Android Runtime • Разработчикам доступно JDK 7 по умолчанию • Можно подключить plugin для базовой поддержки JDK 8
  4. Состояние Java на Android • Java bytecode приложения запускаются на

    Dalvik Virtual Machine либо на Android Runtime • Разработчикам доступно JDK 7 по умолчанию • Можно подключить plugin для базовой поддержки JDK 8 • Google поругался с Oracle по правообладанию
  5. Разработан от JetBrains (IntelliJ) Open source с 2011 г. 100%

    интерполирован с Java Официально поддержка на Android с 2017 г. Простой и надежный язык со множеством фич Что такое Kotlin
  6. Lambda expressions Inline functions Extension functions Null Safety Smart cast

    String templates Properties Primary constructor First-class delegation Type inference for variable and property types Singletons Declaration-site variance Type projections Range expressions Operator overloading Companion objects Data classes Separate interfaces for read-only and mutable collections Coroutines Что есть у Kotlin, но нет у Java
  7. Kotlin syntax class DrinkUp { val barName: String = "Lenore

    Pub" var beers = 0 fun drink() { print(“I have drinked ${beers++} at $dringUpBar”) } }
  8. Java Lambdas interface MathOperation { int operation(int x, int y);

    } MathOperation add = (x, y) -> x + y; int total = add.operation(2, 3); Kotlin Lambdas val add = { x: Int, y: Int -> x + y } val total = add(2, 3)
  9. Null Safety val foo: String = null // Не скомпилируется

    val bar: String? = null print(bar?.length) // Выведет текст “null”
  10. Еще меньше проверок Smart Cast when (x) { is Int

    -> print(x + 1) // ((Int) x) + 1 is String -> print(x.length + 1) // ((String) x).length + 1 is IntArray -> print(x.sum()) // ((IntArray) x).sum() }
  11. Getter, Setter, toString, equals на Java public class DrinkUpMeetup {

    private final long mId; private final Date mStartTime; private int mBeers; public DrinkUpMeetup(...) { mId = id; ... } public long getId() { return mId; } public void setBeers(int beers) { mBeers = beers; } ... @Override public void toString() { … } @Override public boolean equals() { … } @Override public int hashCode() { … } } Г*вно(#`Д´)ノノ┻┻;:'、・゙
  12. Getter, Setter, toString, equals data class data class DrinkUpMeetup( val

    id: Long, val startTime: Date, var beers: Int, )
  13. Читабельнее Значение по-умолчанию data class DrinkUpMeetup( val place: String =

    “Almaty”, val speekers: List<String> ) val drinkUp = DrinkUp( “Almaty, Lenore Pub”, listOf(“Anton”, “Janibek”, “Qwazaar”) )
  14. Читабельнее Именуемые аргументы data class DrinkUpMeetup( val place: String =

    “Almaty”, val speekers: List<String> ) val drinkUp = DrinkUp( place = “Almaty, Lenore Pub”, speekers = listOf(“Anton”, “Janibek”, “Qwazaar”) )
  15. Еще удобнее Перегрузка (Overloading) операторов data class Vector(val x: Float,

    val y: Float) { operator fun plus(v: Vector) = Vector(x + v.x, y + v.y) } val v = Vector(x = 2f, y = 3f) + Vector(x = 4f, y = 1f)
  16. Extensions Расширяет класс с новой функциональностью, не наследуя от класса

    и без необходимости написать Decorator class DrinkUpAlmaty { … } fun DrinkUpAlmaty.drink(whiskey: Whiskey) { print(“I love $whiskey more than beer”) }
  17. val number: Int = 10 В runtime приведет к примитивному

    типу Чего нет у Kotlin Primitive type
  18. Чего нет у Kotlin ternary operator String message = drinkUpMember.isDrinking()

    ? “Будьмо!” : “ЗОЖ” val message = if (drinkUpMember.isDrinking()) “Будьмо!” else “ЗОЖ”
  19. Чего нет у Kotlin ternary operator String message = drinkUpMember.isDrinking()

    ? “Будьмо!” : “ЗОЖ” val message = if (drinkUpMember.isDrinking()) “Будьмо!” else “ЗОЖ”
  20. Kotlin Coroutines experimental • Решает работу с асинхронными задачами •

    Переходы между UI и Background потоками • Suspend ◦ Означает что вызов метода будет блокироваться • Launch ◦ Переходы на соответствующий context потока • Async { do long task }.await()
  21. Kotlin Coroutine suspend fun getBeer() = barman.requestBeer() fun drinkBeer( speaker:

    Speaker = Speaker(“Janibek”) ) = launch(presentationTask) { val beer = async(orderTask) { getBeer() }.await() speaker.drink(beer) }