Шаг 218.
Основы Kotlin.
Расширения. Расширения в стандартной библиотеке Kotlin

    На этом шаге мы рассмотрим расширения в стандартной библиотеке Kotlin.

    Большая часть возможностей стандартной библиотеки Kotlin реализована через функции-расширения и свойства-расширения.

    Например, загляните в файл Strings.kt (обратите внимание: Strings, а не String), дважды нажав Shift и в открывшемся диалоге Search Everywhere введя Strings.kt (рисунок 1).


Рис.1. Окно Search Everywhere

public inline fun CharSequence.trim(predicate: (Char) -> Boolean): CharSequence {
    var startIndex = 0
    var endIndex = length - 1
    var startFound = false

    while (startIndex <= endIndex) {
        val index = if (!startFound) startIndex else endIndex
        val match = predicate(this[index])

        if (!startFound) {
            if (!match)
                startFound = true
            else
                startIndex += 1
        } else {
            if (!match)
                break
            else
                endIndex -= 1
        }
    }


Рис.2. Содержимое файла Strings.kt

    Просмотрев этот файл из стандартной библиотеки, вы обнаружите, что он состоит из расширений типа String. Фрагмент выше, например, объявляет функцию-расширение trim, которая применяется для удаления символов из строки.

    Имена файлов в стандартной библиотеке, которые содержат расширения, часто начинаются с имени расширяемого типа и заканчиваются на -s. Посмотрев на список файлов в стандартной библиотеке, можно увидеть другие файлы, имена которых следуют этому соглашению: Sequences.kt, Ranges.kt, Maps.kt - лишь некоторые примеры файлов, которые добавляют новые возможности в стандартную библиотеку путем расширения соответствующих типов.

    Повсеместное применение функций-расширений для определения базового API - это одна из причин, почему стандартная библиотека Kotlin при такой компактности (около 930 Кбайт) предлагает такие широкие возможности. Расширения очень экономны, потому что единственное определение может добавлять новые возможности в множество типов.

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

    На следующем шаге мы рассмотрим анонимные функции с приемниками.




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