Каковы оптимальные методы выбора между инициализатором свойства и геттером свойства в Котлине? - PullRequest
0 голосов
/ 23 мая 2018

В Котлине у нас есть выбор между:

class|object X {
  [override] val y = Z
}

и

class|object X {
  [override] val y: Y
    get() = Z
}

Какой из них выбрать и когда?

1 Ответ

0 голосов
/ 23 мая 2018

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

class X {
    val y = Z // Z evaluated only at instantiation time
}

Получатель свойства оценивается каждый раз, когда вы обращаетесь к свойству:

class X { 
    val y get() = Z // evaluated on every access of y
}

Несколько факторов, которые могут заставить вас отдать предпочтение одному или другому:

  • Если оценка Z меняется со временем, вы, вероятно, захотите оценивать ее каждый раз.
  • Даже если Z всегда дает один и тот же результат, вы можете отложить оценку до первого доступа.В этом случае вы можете использовать делегат свойства lazy.
  • Возможно, размер результата велик, и вы предпочитаете не сохранять его в памяти, пока он не используется активно.В этом случае предпочтите пользовательский геттер.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...