Объявляют ли Kotlin функции расширения неявно переменные-члены? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть класс данных User

data class User(name: String?, email: String?)

, и я создал функцию расширения, чтобы получить лучший идентификатор (сначала имя, затем адрес электронной почты)

fun User.getBestIdentifier(): String {
    return when {
        !this.name.isNullOrBlank() -> this.name
        !this.email.isNullOrBlank() -> this.email
        else -> ""
}

Но я заметил что в моей среде IDE, если я избавлюсь от всех слов this, он все равно компилируется и запускается. Например:

fun User.getBestIdentifier(): String {
    return when {
        !name.isNullOrBlank() -> name
        !email.isNullOrBlank() -> email
        else -> ""
}

Я пришел к выводу, что Kotlin функции расширения неявно поддерживают переменные-члены, но я не уверен. Есть ли у кого-нибудь документация об этом явлении или объяснение того, почему / как это происходит?

1 Ответ

1 голос
/ 06 августа 2020

Состояние docs :

Ключевое слово this внутри функции расширения соответствует объекту-получателю.

В вашем случае User - объект-получатель, поэтому this относится именно к этому объекту.

Еще одну ссылку можно найти на этом сайте , который описывает выражение this:

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

Далее:

Когда вы вызываете функцию-член на this, вы можете пропустить this.

...