Геттер get

Геттер get определяет поведение при чтении значения свойства. Он вызывается каждый раз, когда происходит обращение к свойству. Геттер может содержать произвольную логику вычисления значения, а также выполнять дополнительные действия.

Синтаксис

kotlinvar propertyName: Type = initialValue
  get() {
    // логика получения значения
    return computedValue
  }
kotlinval propertyName: Type
  get() {
    // логика получения значения
    return computedValue
  }
kotlinvar propertyName: Type = initialValue
  get() = computedValue

Пример

Создадим свойство с геттером, который возвращает вычисляемое значение:

kotlinval numbers = listOf(1, 2, 3, 4, 5)

val sizeDescription: String
  get() = "List contains ${numbers.size} elements"

println(sizeDescription)

Результат выполнения кода:

kotlinString "List contains 5 elements"

Пример

Использование геттера с field для модификации значения при чтении:

kotlinvar price: Double = 100.0
  get() {
    return field * 1.2 // добавляем НДС 20%
  }

println(price)

Результат выполнения кода:

kotlinDouble 120.0

Пример

Геттер для свойства только для чтения с вычисляемым значением:

kotlinval userName = "john_doe"

val displayName: String
  get() = userName.replace("_", " ").capitalize()

println(displayName)

Результат выполнения кода:

kotlinString "John doe"

Пример

Сокращенный синтаксис геттера для однострочных выражений:

kotlinval items = listOf('a', 'b', 'c', 'd', 'e')

val firstItem: Char
  get() = items.first()

println(firstItem)

Результат выполнения кода:

kotlinChar 'a'

Пример

Геттер с дополнительной логикой и проверками:

kotlinvar score: Int = 85
  get() {
    if (field < 0) {
      return 0
    }
    if (field > 100) {
      return 100
    }
    return field
  }

println(score)

score = 150
println(score)

Результат выполнения кода:

kotlinInt 85
Int 100

Смотрите также

  • ключевое слово set,
    которое определяет логику установки значения свойства
  • ключевое слово val,
    которое объявляет свойства только для чтения
  • ключевое слово var,
    которое объявляет изменяемые свойства
  • ключевое слово field,
    которое предоставляет доступ к backing field свойства