[Java, Разработка под Android, Kotlin] Повышение производительности с Kotlin

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
14-Янв-2021 21:30


Я недавно написал статью о нововведениях в Kotlin 1.4.20. И первый комментарий оказался немного несправедливым по отношению к Kotlin.Он утверждал, что зачем мол Kotlin в мобильной разработке, ведь есть Java, потому что это один из лучших языков программирования.И ко всем этому очень много кода Android Framework написаны на Java, а точнее больше 50%!Перед тем, как я поделюсь своим мнением и изложу сей рассказ, попрошу пожалуйста не бить меня стульями :)Ну что ж, начнем со статистики!Что говорят профессиональные разработчики?Google провела небольшой опрос для тех разработчиков, которые используют Kotlin.Результат такой:
67 % опрошенных профессиональных Android разработчиков, которые используют Kotlin, сказали, что он повышает их производительность!
Данные опроса выложила Florina Muntenescu (Android Developer Advocate)Конечно в этот опрос входят не все, кто использует Kotlin, и вообще он не 100% точный.Но такие моменты имеют немалый вес и их стоит учитывать, если вы начинаете свою карьеру в мобильной разработке.Что говорят партнеры Google и другие компании, которые принимали участие в статистики?Профессиональные Android разработчики указали на некоторые весьма важные характеристики Kotlin:
  • Краткость - меньше кода, меньше тестов и меньше времени на отладку. Такой код легче читать и поддерживать
  • Простота - несомненно Kotlin проще Java
Мнение одной из команд Flipkart:
Во время внутреннего опроса, 50% разработчиков отметили, что они сделали бы за меньшие сроки функционал приложения, если бы модуль был бы написан на Kotlin.
Немного статистики от компании Cash App:
Когда команда Cash App начала использовать Kotlin, они избавились от Builder паттерн и сократили кол-во кода, который им нужно было написать (в некоторых случаях они сэкономили 25% на размере кода).
Также о краткости и лаконичности Kotlin говорят ребята из компании Zomato в этом видеоОт компании DuolingoDuolingo - это одна из самых популярных платформ для изучения иностранных языков и одно из наиболее загружаемых приложений в Google Play (более 100 млн. загрузок).В прошлом их кодовая база увеличивалась каждый код на 46% (добавление новых функций, различные обновления библиотек и т.д.). Поэтому они приняли решение переписать приложение на Kotlin.На это ушло порядка двух лет. Их усилия не прошли даром: несмотря на введение новых функций, они сократили свою кодовую базу до тех размеров, которые были 2 года назад!Внутренние опросы показали, что удовлетворенность разработчиков возрасла, что неудивительно!Они заметили один интересный факт: при конвертировании Java файла в Kotlin количество строк кода в среднем сокращается на 30%, а в некоторых случаях более чем на 90%!Kotlin функциональность и продуктивностьВ Android разработке на Java, чтобы указать необязательные параметры у конструктура вы должны сделать одно из двух:1) Добавить множество конструкторов2) Добавить Build паттернВ Kotlin существуют значения по умолчанию, которые делают нашу жизнь проще.Вот так выглядит страшный класс с использованием Builder паттерна на Java:
public class Task {
     private final String name;
     private final Date deadline;
     private final TaskPriority priority;
     private final boolean completed;
     private Task(String name, Date deadline, TaskPriority priority, boolean completed) {
         this.name = name;
         this.deadline = deadline;
         this.priority = priority;
         this.completed = completed;
     }
     public static class Builder {
         private final String name;
         private Date deadline;
         private TaskPriority priority;
         private boolean completed;
         public Builder(String name) {
             this.name = name;
         }
         public Builder setDeadline(Date deadline) {
             this.deadline = deadline;
         return this;
         }
         public Builder setPriority(TaskPriority priority) {
             this.priority = priority;
             return this;
         }
         public Builder setCompleted(boolean completed) {
             this.completed = completed;
             return this;
         }
         public Task build() {
             return new Task(name, deadline, priority, completed);
         }
     }
}
Тот же самый класс на Kotlin (с дополнительной реализацией hashCode(), equals() и некоторыми другими плюшками):
data class Task(
     val name: String,
     val deadline: Date = DEFAULT_DEADLINE,
     val priority: TaskPriority = TaskPriority.LOW,
     val completed: Boolean = false
)
Это впечатляет! А вот ещё пример с применением паттерна Singleton на Java:
public class Singleton{
    private static volatile Singleton INSTANCE;
    private Singleton(){}
    public static Singleton getInstance(){
        if (INSTANCE == null) {                // Single Checked
            synchronized (Singleton.class) {
                if (INSTANCE == null) {        // Double checked
                    INSTANCE = new Singleton();
                }
            }
        }
        return INSTANCE;
    }
    private int count = 0;
    public int count(){ return count++; }
}
На Kotlin:
object Singleton {
     private var count = 0
     fun count(): Int {
         return count++
     }
}
Подобные вещи сильно упрощают разработку и помогают избавиться от шаблонного кода.Kotlin предоставляет довольно мощные средства, которые обеспечивают высокую выразительность кода, вот взгляните:
fun borrow(){
    library -= book // используется operator overloading
    val (title, author) = book // деструктуризация data класса
    println("Borrowed $title") // шаблон строки
}
Помимо лаконичности и простоты, Kotlin вводит дополнительный синтаксис при работе с null ссылками:
var str: String? = null // Разработчик, знает,
                        // что str может ссылаться на null
println(str?.length) // Обращение происходит через Safe (?) оператор
val len = str?.length ?: 0 // значение 0, если str ссылается на null
var listOf: List<String>? = null // может ссылаться на null
listOf?.filter { it.length > 3 } // можно использовать цепочки
      ?.map { it.length }
      ?.forEach { println("Length more 3 -> $it") }
А также в Android предусмотрены дополнительные расширения для Kotlin, которые позволяют сделать код меньше и проще, например:
@Inject
lateinit var viewModelFactory: MyViewModelFactory
private val viewModel by viewModels<MyViewModel> { viewModelFactory }
Большинство современных библиотек поддерживают Kotlin расширения, например:
dependencies {
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
    implementation "androidx.room:room-ktx:$room_version"
    implementation "androidx.paging:paging-runtime-ktx:$paging_version"
}
ЗаключениеJava довольно мощный и высоко развитый язык, но по моему мнению, Kotlin в будущем будет использоваться более 95% мобильными разработчиками, а Java останется на заднем плане.Но это не весомый аргумент тому, что о Java можно забыть в мобильной разработке, хотя по большей части можно :)Даже если Kotlin заполонит весь рынок мобильной разработки, большинство компонентов Android Framework все равно написаны на Java и поэтому в редких случаях придется будет использовать Java.Полезные ссылки:
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_java, #_razrabotka_pod_android (Разработка под Android), #_kotlin, #_kotlin, #_java, #_android_development, #_2021, #_java, #_razrabotka_pod_android (
Разработка под Android
)
, #_kotlin
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 16:02
Часовой пояс: UTC + 5