Шаг 213.
Основы Kotlin.
Расширения. Расширения для типов с поддержкой null

    На этом шаге мы рассмотрим особенности использования такого расширения.

    Расширение также можно определить для типа с поддержкой null. Объявление расширения для типа с поддержкой null позволит обрабатывать значение null в теле функции расширения, а не в точке вызова.

    Добавьте расширение для String с поддержкой null в Extensions.kt и проверьте его в функции main().

.   .   .   .
infix fun String?.printWithDefault(default: String) = print(this ?: default)
.   .   .   .
fun main(args: Array<String>) {
    "Madrigal has left the building".easyPrint().addEnthusiasm().easyPrint()
    42.easyPrint()
    "How many vowels?".numVowels.easyPrint()

    val nullableString: String? = null
    nullableString printWithDefault "Default string"
}
Файл с проектом можно взять здесь.


Рис.1. Добавление расширения для типа с поддержкой null (Extensions.kt)

    Ключевое слово infix доступно для расширений и функций класса с одним аргументом и позволяет использовать более ясный синтаксис вызова функции. Если функция объявлена с infix, вы можете отбросить точку между объектом- приемником и вызовом функции, а также скобки вокруг аргумента.

    Вот варианты вызова printWithDefault() с и без infix:

null printWithDefault "Default string" // С infix
null.printWithDefault("Default string") // Без infix

    Ключевое слово infix позволяет использовать более понятный синтаксис использования функции, который может оказаться неплохой заменой, если расширение или функция класса принимает единственный аргумент.

    Запустите Extensions.kt. Вы увидите вывод Default string.


Рис.2. Результат работы приложения

    Так как значение nullableString равно null, функция printWithDefault() использовала значение по умолчанию.

    На следующем шаге мы рассмотрим, что происходит внутри расширения.




Предыдущий шаг Содержание Следующий шаг