[Java, Разработка под Android, Kotlin] Повышение производительности с Kotlin
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Я недавно написал статью о нововведениях в 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.Полезные ссылки:
- Статья на Medium от Florina Muntenescu (Android Developer Advocate)
- Twitter аккаунт Florina Muntenescu
- Twitter аккаунт Android Developers
- Duolingo перешла на Kotlin
- Android Developers Store: Zomato использует Kotlin чтобы сделать код более безопасным и лаконичным
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка под Android, 1С] Из 1С в Android-разработку: мой опыт перехода внутри Lamoda
- [Информационная безопасность, Open source, JavaScript, Node.JS] CRUD для NMAP’а: решение для мониторинга открытых портов на хостах
- [JavaScript, Программирование] Эффектное программирование. Часть 2: генераторы в полевых условиях
- [PHP, JavaScript, Программирование] OpenCart popup, модальные окна
- [Веб-дизайн, CSS, JavaScript, HTML, Usability] Свободно стилизируемы outline DOM элементов
- [JavaScript, Flutter] Пакет валидации mobx form validation kit 2.0 (TypeScript / Flutter)
- [Разработка веб-сайтов, JavaScript, Программирование] Будущее JavaScript: декораторы
- [Разработка веб-сайтов, JavaScript, Программирование, GitHub, Планшеты] Мой опыт разработки с использованием андроид устройства
- [Разработка веб-сайтов, JavaScript, Angular, TypeScript] Taiga UI — библиотека компонентов под Angular, которую вам стоит попробовать
- [Программирование, Java, Машинное обучение, Искусственный интеллект] Заменят ли роботы программистов?
Теги для поиска: #_java, #_razrabotka_pod_android (Разработка под Android), #_kotlin, #_kotlin, #_java, #_android_development, #_2021, #_java, #_razrabotka_pod_android (
Разработка под Android
), #_kotlin
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:02
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Я недавно написал статью о нововведениях в Kotlin 1.4.20. И первый комментарий оказался немного несправедливым по отношению к Kotlin.Он утверждал, что зачем мол Kotlin в мобильной разработке, ведь есть Java, потому что это один из лучших языков программирования.И ко всем этому очень много кода Android Framework написаны на Java, а точнее больше 50%!Перед тем, как я поделюсь своим мнением и изложу сей рассказ, попрошу пожалуйста не бить меня стульями :)Ну что ж, начнем со статистики!Что говорят профессиональные разработчики?Google провела небольшой опрос для тех разработчиков, которые используют Kotlin.Результат такой: 67 % опрошенных профессиональных Android разработчиков, которые используют Kotlin, сказали, что он повышает их производительность!
Во время внутреннего опроса, 50% разработчиков отметили, что они сделали бы за меньшие сроки функционал приложения, если бы модуль был бы написан на Kotlin.
Когда команда Cash App начала использовать Kotlin, они избавились от Builder паттерн и сократили кол-во кода, который им нужно было написать (в некоторых случаях они сэкономили 25% на размере кода).
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); } } } data class Task(
val name: String, val deadline: Date = DEFAULT_DEADLINE, val priority: TaskPriority = TaskPriority.LOW, val completed: Boolean = false ) 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++; } } object Singleton {
private var count = 0 fun count(): Int { return count++ } } fun borrow(){
library -= book // используется operator overloading val (title, author) = book // деструктуризация data класса println("Borrowed $title") // шаблон строки } 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") } @Inject
lateinit var viewModelFactory: MyViewModelFactory private val viewModel by viewModels<MyViewModel> { viewModelFactory } 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" }
=========== Источник: habr.com =========== Похожие новости:
Разработка под Android ), #_kotlin |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:02
Часовой пояс: UTC + 5