На этом шаге мы рассмотрим расширения в стандартной библиотеке 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 Кбайт) предлагает такие широкие возможности. Расширения очень экономны, потому что единственное определение может добавлять новые возможности в множество типов.
В изученных шагах вы познакомились с расширениями, предлагающими альтернативный способ определения общего поведения. В следующих шагах вы погрузитесь в удивительный мир функционального программирования.
На следующем шаге мы рассмотрим анонимные функции с приемниками.