Практические расширения: помощники для Context, View и String
Создавайте практические служебные расширения в стиле Android для распространённых задач.
«Практические расширения: помощники для Context, View и String» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Расширения в реальных проектах
Расширения особенно полезны для типов фреймворка, которые нельзя изменять: Context, View, String, коллекций. Ниже приведены практические шаблоны непосредственно из промышленных Android-кодовых баз.
Вспомогательное средство Context.toast
Оберните многословную конструкцию Toast.makeText(...).show() в расширение, состоящее из одной строки.
import android.content.Context
import android.widget.Toast
fun Context.toast(message: String, long: Boolean = false) {
val duration = if (long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
Toast.makeText(this, message, duration).show()
}
// Usage: context.toast("Saved!")Вспомогательные средства ресурсов Context
Избегайте приведений типов при поиске ресурсов. Расширения повышают удобство чтения и безопасность типов.
import android.content.Context
import androidx.core.content.ContextCompat
fun Context.color(res: Int) = ContextCompat.getColor(this, res)
fun Context.string(res: Int) = getString(res)
fun Context.dp(value: Int) = (value * resources.displayMetrics.density).toInt()
// Usage: val red = context.color(R.color.error)View.show / View.hide
Переключайте View.VISIBLE / View.GONE без лишних действий.
import android.view.View
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
// Usage: progressBar.show(); button.hide()View.setVisible(логическое значение)
Однострочная функция, которая переключает видимость по условию и заменяет код видимости с if-else.
import android.view.View
fun View.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}
// Usage: errorLabel.setVisible(state.hasError)Лямбда View.onClick
Более чистый обработчик нажатия: вместо анонимного OnClickListener передаётся лямбда.
import android.view.View
fun View.onClick(action: (View) -> Unit) {
setOnClickListener(action)
}
// Usage:
// button.onClick { view -> println("clicked") }String.isValidEmail
Предметно-ориентированные расширения для проверки String делают бизнес-логику понятной.
fun String.isValidEmail(): Boolean {
val regex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
return regex.matches(this)
}
fun main() {
println("ada@example.com".isValidEmail()) // true
println("nope".isValidEmail()) // false
}String.truncate
Обрезайте длинные строки с многоточием — это распространённое вспомогательное средство для интерфейса.
fun String.truncate(max: Int, ellipsis: String = "..."): String =
if (length <= max) this else substring(0, max - ellipsis.length) + ellipsis
fun main() {
println("The quick brown fox".truncate(10)) // The qui...
println("short".truncate(10)) // short
}String.toTitleCase
Делайте первую букву каждого слова заглавной — это распространённое вспомогательное средство форматирования.
fun String.toTitleCase(): String = split(" ").joinToString(" ") {
if (it.isEmpty()) it
else it[0].uppercaseChar() + it.substring(1).lowercase()
}
fun main() {
println("hello WORLD from kotlin".toTitleCase())
}Расширение списка: chunkedBy
Группируйте идущие подряд элементы по ключу — это полезно для разделов интерфейса.
fun <T, K> List<T>.chunkedBy(keySelector: (T) -> K): List<List<T>> {
val result = mutableListOf<MutableList<T>>()
var lastKey: K? = null
for (item in this) {
val key = keySelector(item)
if (key == lastKey) result.last().add(item)
else { result.add(mutableListOf(item)); lastKey = key }
}
return result
}
fun main() {
val data = listOf(1, 1, 2, 2, 2, 3, 1)
println(data.chunkedBy { it }) // [[1, 1], [2, 2, 2], [3], [1]]
}Вспомогательные средства Activity
Сделайте навигацию типобезопасной и более краткой с помощью обобщений с восстановлением типа.
import android.content.Context
import android.content.Intent
inline fun <reified T> Context.startActivity() {
startActivity(Intent(this, T::class.java))
}
// Usage: context.startActivity<MainActivity>()Не злоупотребляйте расширениями
Расширения добавляются в глобальное пространство имён. Делайте их целенаправленными, ограничивайте область видимости (private/internal) и группируйте по предметной области — хорошо работает отдельный файл для каждого типа-получателя.
fun String.shout() = uppercase() + "!"
fun String.whisper() = lowercase() + "..."
fun main() {
println("hello".shout())
println("HELLO".whisper())
}Быстрая проверка
Почему расширения отлично подходят для типов фреймворка Android, таких как Context или View?
Повторение
Расширения идеально подходят для добавления удобных вспомогательных средств к типам фреймворка (Context, View, String, спискам). Распространённые шаблоны: переключение видимости, обработчики нажатий, поиск ресурсов, проверка и форматирование. Делайте расширения целенаправленными, ограничивайте их область видимости и группируйте по типу-получателю.
Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Практические расширения: помощники для Context, View и String» бесплатный?
Да — полный текст урока «Практические расширения: помощники для Context, View и String» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Практические расширения: помощники для Context, View и String»?
Создавайте практические служебные расширения в стиле Android для распространённых задач. Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Практические расширения: помощники для Context, View и String»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Функции-расширения: синтаксис и правила диспетчеризации
- Свойства-расширения и вычисляемые расширения
- Расширения областей видимости и companion-расширения
- Практические расширения: помощники для Context, View и String