О стиле кода Kotlin.Когда мы используем поле? .Let {it.doSomething ()} и когда используем поле? .DoSomething () напрямую - PullRequest
0 голосов
/ 25 февраля 2019

Недавно я столкнулся с проблемой стиля кода в Котлине.Я не могу сказать, какой стиль кода лучше.

Предположим, здесь есть обнуляемое поле:

var scoreView: TextView? = null
val bgImageView: ImageView? = null

И я хотел бы написать так:

fun foo() { 
    scoreView?.apply {
       text = getScore()
       textColor = getColor()
       ...
    }

    bgImageView?.apply {
        Glide.with(context)
             .load(xxx)
             .into(this)
    }
}

И мой руководитель команды хочет изменить его на:

fun foo() {
    scoreView?.text = getScore()
    scoreView?.textColor = getColor()
    ...
    Glide.with(context)
         .load(xxx)
         .into(bgImageView?:return)
}

Я чувствую, что оба в порядке со мной, но предпочитаю первый, потому что я мог бы написать меньше «xxView?».

IИнтересно, есть ли какой-то стиль кода или правило по этому поводу.Или какое-то общее мнение об этом.

Спасибо.

1 Ответ

0 голосов
/ 25 февраля 2019

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

В первом примере вы используете apply именно для той цели, для которой оно было разработано: для установки нескольких свойств наодин объект, и улучшить читаемость в этих ситуациях.

scoreView?.apply {
   text = getScore()
   textColor = getColor()
   ...
}

Во втором примере функция apply служит для отделения кода, который воздействует на ваш обнуляемый объект bgImageView.Это использование поддерживается в руководстве по стилю, хотя в этих обнуляемых случаях рекомендуется let.

bgImageView?.apply { 
    Glide.with(context)
         .load(xxx)
         .into(this)
}

bgImageView?.let { 
    Glide.with(context)
         .load(xxx)
         .into(it)
}

Руководство по стилю также описывает предполагаемое использование из * 1018Функции *, also и run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...