Kotlin Academy · Урок

Практические расширения: помощники для Context, View и String

Создавайте практические служебные расширения в стиле Android для распространённых задач.

Урок 4 из 414 шагов

«Практические расширения: помощники для 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 — локальная установка не требуется.

Все уроки этого курса

  1. Функции-расширения: синтаксис и правила диспетчеризации
  2. Свойства-расширения и вычисляемые расширения
  3. Расширения областей видимости и companion-расширения
  4. Практические расширения: помощники для Context, View и String
← Назад к Kotlin Academy