[Kotlin] Нововведения в Kotlin 1.4.0
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Сегодня я решил написать о самых главных нововведениях в Kotlin 1.4.0. Думаю, что начинающим Android разработчикам будет очень интересна данная тема и они смогут применить новые фишки в своих приложениях. Также, я надеюсь, что моя статья будет полезна и для профессиональных разработчиков, которые очень любят и помогают развивать Kotlin. Основные темы, которые я затрону:
- Нововведения в синтаксисе
- Новые инструменты в IDE
- Новые компилятор
- Качество и производительность
Ну что ж, предлагаю вам налить себе кофе или чай, запастись сладеньким и можно начинать)Немного о релизах KotlinНа момент написания статьи самыми новыми релизами были:РелизДата и краткое описаниеKotlin 1.4.017 августа, 2020, основной пласт нововведений, который мы сегодня рассмотрим. Улучшение производительности, введение новых синтаксических конструкций и добавление новых функций в IDE.Kotlin 1.4.10Kotlin 1.4.20Kotlin 1.4.217 сентября, 2020, исправление багов для Kotlin 1.4.023 ноября, 2020, несколько улучшений, такие как производительность и поддержка новых функций для JVM.7 декабря, 2020, исправление ошибок для Kotlin 1.4.20Нововведения в синтаксисеSAM - интерфейсыОдной из самых важных и довольно полезных фишек является добавление нового синтаксиса для SAM интерфейсов (SAM - Single Abstract Method, также интерфейс с одним методом называют функциональным). Чтобы указать компилятору Kotlin о том, что перед нами SAM интерфейс нужно использовать ключевое слов fun, как ниже в примере:
fun interface ItemSelectListener {
fun onItemSelect(position: Int): String
}
val items = listOf("Item 1", "Item 2", "Item 3")
val myListener = ItemSelectListener { position ->
items[position]
}
fun main() {
print("selected item -> ${myListener.onItemSelect(0)}")
}
Одно из применений: передача обработчиков событий в адаптер RecyclerView для отслеживания нажатия на элемент списка. Данный подход сокращает количество строк кода и вводит дополнительные удобства.Явный API режимKotlin предлагает новый явный API режим для разработчиков библиотек.Основные моменты:
- Явный API режим помогает делать API библиотек чистым и последовательным
- Накладывает различные требования и ограничения на публичные API:
- Строгое использование модификаторов доступа
- Явное указание типов для свойств и функций, которые являются частью публичного API
- Некоторые определения исключены из проверок: свойства data классов, первичные конструкторы и т.д.
Более подробноСмешанные именованные и позиционные параметрыДовольно легко объяснить на примере. До Kotlin 1.4.0 нельзя было делать так:
fun foo(a: Int, b: String = "", c: Int) {}
fun main() {
foo(a = 10, "Hello, World", c = 100000)
}
В данном примере мы сначала указываем именованный параметр, а потом позиционный (строка "Hello, World"). В ранних версиях Kotlin нужно было всегда указывать сначала позиционные.Конечная запятаяДовольное удобно при обмене строк или копировании параметров функций
fun reformat(str: String,
wordSeparator: Char = ' ', // конечная запятая
) {
// TODO
}
Улучшения вызываемых ссылок на функцииТеперь вы можете использовать ссылки на функции, которые имеют default аргументы:
fun foo(a: Int = 0): String = "value -> $a" // параметр 'a' имеет значение по умолчанию 0
fun apply(f: () -> String): String = f()
fun main() {
println(apply(::foo))
}
Вы можете использовать ссылки на функции, которые возвращают любое тип, там где требуются функции возвращающие Unit. Например у нас есть функция foo, которая принимает другую функцию, которая ничего не возращает (Unit). Мы можем передать ей любую ссылку на функцию, у которой совпадает количество аргументов, а возвращаемый тип может быть любой:
fun foo(f: () -> Unit) { }
fun returnValue(): Int = 42
fun main() {
foo { returnValue() } // Так было до Kotlin 1.4.0
foo(::returnValue) // начиная с Kotlin 1.4.0 можно передать сюда функцию,
// которая возвращает любой тип
}
Вы можете адаптировать ссылки на функции, когда передается переменное количество аргументов:
fun foo(a: Int, vararg words: String) {}
fun useCase0(f: (Int) -> Unit) {}
fun useCase1(f: (Int, String) -> Unit) {}
fun useCase2(f: (Int, String, String) -> Unit) {}
fun test() {
useCase0(::foo)
useCase1(::foo)
useCase2(::foo)
}
В дополнение появилась поддержка передачи ссылки на функцию, там где используется ключевое слово suspend
fun lockUI() {}
fun takeSuspend(f: suspend () -> Unit) {}
fun test() {
takeSuspend { lockUI() } // до Kotlin 1.4.0
takeSuspend(::lockUI) // В Kotlin 1.4.0 можно сделать так
}
Использование break and continue внутри when выражений, включенных в цикл forВ Kotlin 1.4.0 вы можете использовать ключевые слова break и continue в операторе when, когда он вложен в циклfor (до этого нужно было создавать метки, более подробно)
fun foo(numbers: List<Int>) {
for (num in numbers) {
when {
num % 2 == 0 -> continue
num == 10 -> break
else -> println(x)
}
}
}
Новые инструменты в IDEНовое гибкое окно создания проектаТеперь вы можете создавать и конфигурировать различные типы проектов Kotlin более гибко и специфично:
Новое окно создания проекта позволяет:
- Выбрать шаблон проекта (в будущем будет добавлено больше шаблонов)
- Выбрать систему сборки (Gradle, Maven)
- Посмотреть структуру проекта до его создания
- Добавить/удалить модули, поддерживаемые данным шаблоном проекта
- Настроить JVM версию, framework для тестирования и другие вещи.
Отладчик КорутинОчень много разработчиков на Kotlin используют всеми известные корутины (а как же без них). До Kotlin 1.4.0 приходилось полагаться на введение логов и умственные усилия разработчика, чтобы отлаживать программы с наличием корутин.Теперь появился новый инструмент, который находится в Debug Tool Window в Intellij IDEA, который позволяет:
- Легко проверить состояние каждой корутины
- Посмотреть значения локальных и захваченных переменных для корутин
- Посмотреть полный стек создания корутины, а также стек внутри корутины (все фрэймы с локальными переменными)
- Также можно получить полный отчет, воспользовавшись функцией Get Coroutines Dump
Новый компиляторГлавной целью создания нового компилятора было соответствие характеристикам:
- Скорость
- Создание общего интерфейса для разных платформ, которые поддерживает Kotlin
- Обеспечение API для расширения компилятора
Основные улучшения по сравнению с предыдущим компилятором:
- Новый более мощный алгоритм для автоматического вывода типов с поддержкой более сложных сценариев вывода типов и с улучшенниями для делегированных свойств. (данный алгоритм уже был доступен в версии Kotlin 1.3 при указании дополнительных опций, в новой версии он будет использоваться по умолчанию). Вы можете найти более десятка исправленных багов и ошибок в новом алгоритме на YouTrack
- Унифицированный backend компилятора (в Kotlin есть несколько backend, такие как: Kotlin/JVM, Kotlin/JS и Kotlin/Native. Последний был основан на промежуточном представлении (IR) для Kotlin кода)
Сейчас компания JetBrains работает над более производительной frontend реализацией.Frontend - это часть компилятора, которая разбирает код, разрешает имена, выполняет проверки типов и многое другое.Качество и производительностьОдной из главных целей данного релиза является улучшение производительности и стабильности IDE, фокус на вещах, которые важны для разработчиков, а также сделать Kotlin более продуктивным и быстрым. Основные улучшения:
- Было исправлено более 60 ошибок производительности, включая большое количество случаев зависания IDE и утечек памяти
- Прирост в скорости IDE, который можно увидеть, пройдя по ссылке (здесь время подсвечивания синтаксиса Kotlin при открытии большого проекта). Также на рисунке ниже показано время срабатывания автодополнения (которое уменьшилось по сравнению с предыдущими релизами)
- И многие другие, которые напрямую связаны с созданием нового компилятора.
Немного полезных ссылок
- Информация о релизе Kotlin 1.4.0 на блоге JetBrains
- Нововведения на официальном сайте Kotlin
- Kotlin 1.4.0 Online Event (на английском)
- Статистика от StackOverflow Survey 2020
- Cтатистика от JetBrains
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка мобильных приложений, Разработка под Android] Как безболезненно мигрировать с RxJava на Kotlin Coroutines+Flow
- [Разработка под iOS, Разработка мобильных приложений, Разработка под Android, Kotlin] Варианты настройки iosMain sourceSet'а в Kotlin Multiplatform Mobile
- [Программирование, Kotlin] Дорога к BPMN
- [Разработка под iOS, Разработка мобильных приложений, Разработка под Android, Тестирование мобильных приложений] 3 видео для мобильного разработчика
- [Java, Scala, Kotlin, Kubernetes] IntelliJ IDEA 2020.3
- [Разработка под Android, SQLite, Kotlin] Полнотекстовый поиск FTS3, FTS4 и FTS5 в Android
- [Поисковые технологии, Python, Разработка мобильных приложений, Kotlin] Не баян: ищем дубликаты изображений на основе Milvus с индексом FAISS внутри
- [Разработка мобильных приложений] Kotlin Multiplatform. Работаем с многопоточностью на практике. Ч.2
- [Разработка мобильных приложений] Kotlin Multiplatform. Работаем с многопоточностью на практике. Ч.1
- [Программирование, Kotlin] Повышение читаемости кода с помощью расширений Kotlin (перевод)
Теги для поиска: #_kotlin, #_kotlin, #_novinki (новинки), #_reliz (релиз), #_kotlin
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:16
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Сегодня я решил написать о самых главных нововведениях в Kotlin 1.4.0. Думаю, что начинающим Android разработчикам будет очень интересна данная тема и они смогут применить новые фишки в своих приложениях. Также, я надеюсь, что моя статья будет полезна и для профессиональных разработчиков, которые очень любят и помогают развивать Kotlin. Основные темы, которые я затрону:
fun interface ItemSelectListener {
fun onItemSelect(position: Int): String } val items = listOf("Item 1", "Item 2", "Item 3") val myListener = ItemSelectListener { position -> items[position] } fun main() { print("selected item -> ${myListener.onItemSelect(0)}") }
fun foo(a: Int, b: String = "", c: Int) {}
fun main() { foo(a = 10, "Hello, World", c = 100000) } fun reformat(str: String,
wordSeparator: Char = ' ', // конечная запятая ) { // TODO } fun foo(a: Int = 0): String = "value -> $a" // параметр 'a' имеет значение по умолчанию 0
fun apply(f: () -> String): String = f() fun main() { println(apply(::foo)) } fun foo(f: () -> Unit) { }
fun returnValue(): Int = 42 fun main() { foo { returnValue() } // Так было до Kotlin 1.4.0 foo(::returnValue) // начиная с Kotlin 1.4.0 можно передать сюда функцию, // которая возвращает любой тип } fun foo(a: Int, vararg words: String) {}
fun useCase0(f: (Int) -> Unit) {} fun useCase1(f: (Int, String) -> Unit) {} fun useCase2(f: (Int, String, String) -> Unit) {} fun test() { useCase0(::foo) useCase1(::foo) useCase2(::foo) } fun lockUI() {}
fun takeSuspend(f: suspend () -> Unit) {} fun test() { takeSuspend { lockUI() } // до Kotlin 1.4.0 takeSuspend(::lockUI) // В Kotlin 1.4.0 можно сделать так } fun foo(numbers: List<Int>) {
for (num in numbers) { when { num % 2 == 0 -> continue num == 10 -> break else -> println(x) } } } Новое окно создания проекта позволяет:
Отладчик КорутинОчень много разработчиков на Kotlin используют всеми известные корутины (а как же без них). До Kotlin 1.4.0 приходилось полагаться на введение логов и умственные усилия разработчика, чтобы отлаживать программы с наличием корутин.Теперь появился новый инструмент, который находится в Debug Tool Window в Intellij IDEA, который позволяет:
Новый компиляторГлавной целью создания нового компилятора было соответствие характеристикам:
Немного полезных ссылок
=========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:16
Часовой пояс: UTC + 5