[Kotlin] Нововведения в Kotlin 1.4.0

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

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

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


Сегодня я решил написать о самых главных нововведениях в 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 при открытии большого проекта). Также на рисунке ниже показано время срабатывания автодополнения (которое уменьшилось по сравнению с предыдущими релизами)
  • И многие другие, которые напрямую связаны с созданием нового компилятора.

Немного полезных ссылок
===========
Источник:
habr.com
===========

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

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

Текущее время: 23-Ноя 01:00
Часовой пояс: UTC + 5