Почему можно использовать this внутри функции apply

Ответ

В Kotlin apply — это функция-расширение, которая принимает лямбду с получателем (T.() -> Unit). Это означает, что внутри лямбды this ссылается на объект, для которого вызван apply.

Пример:

val person = Person().apply {
    this.name = "Alice" // можно без this
    age = 25            // доступ к свойствам напрямую
}

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

Ответ 18+ 🔞

Ну, слушай, тут про apply в Kotlin, такая штука, что просто ебушки-воробушки, как удобно. Представь, ты создал объект, а настроить его надо — поля понаставлять, методы вызвать. Так вот, apply — это как твой личный раб на пять минут, который делает всё, что скажешь, и потом отдаёт тебе готовый объект обратно. Красота, ёпта!

Смотри, как это выглядит. Берёшь ты, допустим, класс Person. Хочешь экземпляр создать и сразу имя-возраст запихнуть. Без apply пришлось бы либо в конструктор всё тащить, либо создавать, а потом каждое свойство отдельно присваивать — залупа конская, одним словом.

А с apply — красота:

val person = Person().apply {
    this.name = "Alice" // this можно и не писать, он тут и так подразумевается
    age = 25            // вот так, напрямую к полям обращаешься, будто уже внутри объекта сидишь
}

Вот этот this — он опционален, на самом деле. Потому что лямбда-то у нас с получателем. Это значит, что весь её код выполняется в контексте того самого свежесозданного Person. Типа ты залез внутрь него и там хозяйничаешь. Волнение ебать, как просто!

И главный фокус в чём? После всех этих манипуляций apply тебе возвращает тот же самый, но уже настроенный объект. Не Unit, не какую-то хуйню, а именно его — person. Удобно для цепочек или когда нужно сразу и создать, и настроить.

Если без этого apply, то выглядело бы как-то так:

val person = Person()
person.name = "Alice"
person.age = 25

Три строчки вместо одной. Ну это же пиздопроебибна какая-то, согласись. Особенно если свойств овердохуища.

Короче, apply — это как волшебный пендель, который загоняет тебя прямо внутрь объекта на разовую работу. Сделал дело — гуляй смело, объект твой готов. Хуй с горы, а не функция!