Kotlin Academy · Урок

apply и also

Настраивайте объекты и выполняйте побочные действия

Урок 2 из 413 шагов

«apply и also» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Настройка объектов

apply и also — это функции области видимости, которые возвращают сам объект, а не результат лямбды. Поэтому они идеально подходят для настройки и построения цепочек вызовов.

Функция apply

apply выполняет блок, используя объект как this, и возвращает объект. Это классический инструмент для инициализации объекта после его создания.

fun main() {
    val builder = StringBuilder().apply {
        append("Hello")
        append(", ")
        append("World")
    }
    println(builder.toString())
}

Почему apply возвращает объект

Поскольку apply возвращает получатель, можно напрямую присвоить настроенный объект переменной.

data class Person(var name: String = "", var age: Int = 0)

fun main() {
    val p = Person().apply {
        name = "Alice"
        age = 30
    }
    println(p)
}

apply использует this

Внутри apply объект является получателем, поэтому обращаться к его свойствам можно напрямую, без префикса.

data class Config(var host: String = "", var port: Int = 0)

fun main() {
    val config = Config().apply {
        host = "localhost"
        port = 8080
    }
    println("${config.host}:${config.port}")
}

Функция also

also выполняет блок, используя объект как it, и возвращает объект. Она применяется для побочных эффектов, например ведения журнала или проверки, которые не изменяют объект.

fun main() {
    val numbers = mutableListOf(1, 2, 3)
    numbers
        .also { println("Before: $it") }
        .add(4)
    println("After: $numbers")
}

also использует it

Поскольку also предоставляет доступ к объекту через it, эта функция удобна, когда нужно по-прежнему обращаться к внешнему this или просто явно сохранить ссылку.

fun main() {
    val value = 42
        .also { println("Logging value: $it") }
    println(value)
}

apply и also

Различие такое же, как между run и let:

  • apply использует this и лучше всего подходит для настройки свойств.
  • also использует it и лучше всего подходит для побочных эффектов над объектом.

Обе функции возвращают исходный объект.

data class Box(var size: Int = 0)

fun main() {
    val box = Box()
        .apply { size = 5 }
        .also { println("Created box with size ${it.size}") }
    println(box)
}

Цепочка apply и also

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

data class Account(var owner: String = "", var balance: Int = 0)

fun main() {
    val account = Account()
        .apply { owner = "Sam" }
        .apply { balance = 100 }
        .also { println("New account: $it") }
    println(account.balance)
}

also для проверки

Используйте also, чтобы вставить проверку в середину цепочки, не нарушая её ход.

fun main() {
    val result = listOf(1, 2, 3, 4)
        .filter { it % 2 == 0 }
        .also { check(it.isNotEmpty()) { "No even numbers" } }
    println(result)
}

Возврат объекта поддерживает конвейеры

Общая особенность apply и also заключается в том, что они никогда не прерывают цепочку: они всегда возвращают тот же объект, с которого вы начали.

fun main() {
    val text = StringBuilder()
        .apply { append("a") }
        .also { it.append("b") }
        .apply { append("c") }
    println(text)
}

Как выбрать apply или also

Выбирайте apply, когда инициализируете или изменяете объект, используя его собственные члены. Выбирайте also, когда выполняете действие с объектом, но не настраиваете его, например ведёте журнал, отлаживаете или проверяете объект.

Быстрая проверка

Какое значение возвращают apply и also?

Итоги

Вы изучили две функции области видимости, возвращающие объект:

  • apply использует this для настройки объекта.
  • also использует it для побочных эффектов над объектом.

Обе функции возвращают объект, что позволяет создавать понятные цепочки вызовов. Далее вы узнаете, как группировать операции с помощью with.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
51
Уроки
203

Часто задаваемые вопросы

Урок «apply и also» бесплатный?

Да — полный текст урока «apply и also» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «apply и also»?

Настраивайте объекты и выполняйте побочные действия Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «apply и also»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. let и run
  2. apply и also
  3. with
  4. Выбор подходящего инструмента
← Назад к Kotlin Academy