Решите, основываясь на том, когда вы хотите, чтобы оценка произошла.Инициализатор свойства приводит к семантике запоминания: инициализирующее выражение оценивается только во время создания экземпляра:
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
. - Возможно, размер результата велик, и вы предпочитаете не сохранять его в памяти, пока он не используется активно.В этом случае предпочтите пользовательский геттер.