Я недавно написал статью о нововведениях в 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:

  1. Краткость – меньше кода, меньше тестов и меньше времени на отладку. Такой код легче читать и поддерживать

  2. Простота – несомненно Kotlin проще Java

Мнение одной из команд Flipkart:

Во время внутреннего опроса, 50% разработчиков отметили, что они сделали бы за меньшие сроки функционал приложения, если бы модуль был бы написан на Kotlin.

Немного статистики от компании Cash App:

Когда команда Cash App начала использовать Kotlin, они избавились от Builder паттерн и сократили кол-во кода, который им нужно было написать (в некоторых случаях они сэкономили 25% на размере кода).

Также о краткости и лаконичности Kotlin говорят ребята из компании Zomato в этом видео

От компании Duolingo

Duolingo – это одна из самых популярных платформ для изучения иностранных языков и одно из наиболее загружаемых приложений в 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.

Полезные ссылки:

  1. Статья на Medium от Florina Muntenescu (Android Developer Advocate)

  2. Twitter аккаунт Florina Muntenescu

  3. Twitter аккаунт Android Developers

  4. Duolingo перешла на Kotlin

  5. Android Developers Store: Zomato использует Kotlin чтобы сделать код более безопасным и лаконичным

Let’s block ads! (Why?)

Read More

Recent Posts

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

1 день ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

2 дня ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

2 дня ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

2 дня ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

2 дня ago

Яндекс проведет гик-фестиваль Young Con

27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…

3 дня ago