Ключевое слово set

Ключевое слово set используется для объявления сеттера свойства. Сеттер - это специальный метод, который вызывается автоматически при каждой попытке установить новое значение свойству. Он позволяет контролировать процесс присваивания значения, добавлять валидацию или выполнять дополнительные действия.

Синтаксис

kotlinvar <propertyName>: <PropertyType> = <initialValue>
  set(value) {
    // логика сеттера
    field = value // присваивание значения
  }
kotlinvar <propertyName>: <PropertyType>
  get() = // возвращаемое значение
  set(value) {
    // логика сеттера
    field = value
  }

Пример

Создадим свойство с сеттером, который проверяет, что устанавливаемое значение не отрицательное:

kotlinvar age: Int = 0
  set(value) {
    if (value >= 0) {
      field = value
    } else {
      println("Error: Age cannot be negative")
    }
  }

Проверим работу сеттера:

kotlinval person = Person()
person.age = 25
println(person.age)
person.age = -5
println(person.age)

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

kotlin25
Error: Age cannot be negative
25

Пример

Сеттер с модификатором доступа:

kotlinvar name: String = ""
  private set

Проверим работу:

kotlinval obj = TestClass()
obj.name = "John" // Ошибка компиляции: setter is private
println(obj.name)

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

kotlinCompilation error: Cannot assign to 'name': the setter is private

Пример

Сеттер с дополнительной логикой:

kotlinvar price: Double = 0.0
  set(value) {
    field = if (value > 1000) value * 0.9 else value
    println("Price set to: $field")
  }

Проверим работу:

kotlinval product = Product()
product.price = 500.0
product.price = 2000.0
println("Final price: ${product.price}")

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

kotlinPrice set to: 500.0
Price set to: 1800.0
Final price: 1800.0

Пример

Использование параметра сеттера:

kotlinvar description: String = ""
  set(newDescription) {
    field = newDescription.trim().uppercase()
  }

Проверим работу:

kotlinval item = Item()
item.description = "   hello world   "
println("'${item.description}'")

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

kotlin'HELLO WORLD'

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

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