Разница между Apply, Let, Too и Run в Котлине

применять

Функция apply принимает цель и возвращает саму цель. Это позволяет вам выполнять некоторые операции с целью, сохраняя при этом исходную цель.

fun <T> T.apply(block: T.() -> Unit): T

T — это тип цели, а блок — это лямбда-выражение, которое выполняет некоторую операцию над целью. В этой лямбде вы можете использовать ключевое слово this для ссылки на текущую цель.

val person = Person().apply {
    name = "John"
    age = 30
    address = "New York"
}

В этом примере мы создаем цель Person и устанавливаем характеристики цели в функции apply. В конечном итоге возвращается сама цель Person.

позволять

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

fun <T, R> T.let(block: (T) -> R): R

T — тип цели, R — тип возвращаемого значения, а блок — лямбда-выражение, которое выполняет некоторые операции с целью и возвращает результат.

val person = Person("Alice", 25)
val ageAfterFiveYears = person.let {
    it.age + 5
}

В этом примере функция let используется для расчета возраста целевого объекта Person через пять лет.

также

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

fun <T> T.also(block: (T) -> Unit): T

T — это тип цели, а блок — это лямбда-выражение, которое выполняет некоторую операцию над целью. В этой лямбде вы можете использовать ключевое слово it для ссылки на текущую цель.

val person = Person("Alice", 25).also {
    it.name = "Bob"
    it.age = 30
}

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

бегать

run — это функция расширения, сочетающая в себе функции apply и let. Функция запуска напрямую обращается к характеристикам и методам целевого объекта-получателя в лямбда-выражении и возвращает результаты лямбда-выражения.

fun <T, R> T.run(block: T.() -> R): R

T — тип цели, R — тип возвращаемого значения, а блок — лямбда-выражение, которое выполняет некоторые операции с целью и возвращает результат. В этой лямбде вы можете использовать ключевое слово this для ссылки на текущую цель.

val person = Person("Alice", 25)
val greeting = person.run {
    "Hello, $name! You are $age years old."
}

В этом примере функция run используется для создания строки, содержащей целевую информацию о человеке.

Подведем итог

с不怎么使用,因为它确实不防空; 经常使用的是запуститьприменить

  1. Возвращаемый результат закрытия выполнения — это результат выполнения закрытия; возвращаемый результат применения — это сам вызывающий объект.
  2. Различия в использовании: run более склонен выполнять некоторые другие сложные логические операции, а apply больше касается настройки самого вызывающего объекта.
  3. В большинстве случаев, если я не настраиваю сам вызывающий объект, я использую run.

Guess you like

Origin blog.csdn.net/Billy_Zuo/article/details/133904793