
Если вы новичок в Kotlin, эта тема может быть немного запутанной. Давайте сломаем это.
В мире ООП мы структурируем наш код в классах и создаем объекты, чтобы у нас был более пригодный для повторного использования и более читаемый код. Внутри классов у нас есть поля и свойства.
В редких случаях мы не должны выставлять наши поля за пределы класса, вместо этого мы должны инкапсулировать свойства и, возможно, добавить некоторую легкую логику внутри свойств. Тяжелая логика внутри свойств не рекомендуется.
Kotlin придумал, как облегчить нашу жизнь, генерируя кое-что в фоновом режиме.
Все идет нормально. Теперь давайте посмотрим, как мы определяем поля и свойства в Kotlin.
class Human {
var requireVaccineDose = 3
}
Да это оно. Kotlin будет генерировать свойства (читай геттеры и сеттеры) в фоновом режиме.
Это то же самое, что:
class Human {
var numOfVacineDose = 3
get() = field
set(value) {
field = value
}
}
Эти геттеры и сеттеры в этом примере избыточны, потому что они генерируются в фоновом режиме. Но иногда нам понадобится некоторая пользовательская логика для написания чистого и лаконичного кода.
class Human {
var numOfVacineDose = 2 //this is default value
get() = field
set(value) = if(numOfVacineDose > 2) {
field = value
}
}
Чтобы установить какое-либо значение для свойства, вам нужно добавить varkeyword, поскольку оно представляет изменяемое состояние и valkeyword если вы хотите иметь доступ только для чтения.
Здесь мы можем добавить еще одно неизменяемое свойство, которое возвращается, если человек полностью защищен.
val isFullyProtected get() = this.numOfVacineDose > 3
Если мы хотим использовать какую-то тяжелую и медленную операцию в геттере, как в приведенном выше примере, вы должны создать метод, обеспечивающий ясность.
Теперь, что, если мы хотим создать доступ только для чтения извне и только для записи изнутри класса. Kotlin предоставляет шаблон доступа к свойству через сеттер, добавляя модификатор видимости.
var vaccineCertificateNum: Int = 31345
private set
Теперь любой может видеть vaccineCertificateNum, но толькокласс Human может изменить значение этого свойства.
Доступ к свойству в Kotlin осуществляется через «точечный синтаксис», который выглядит следующим образом.
// creating some Human clone and set the number of vaccine dose
val human = Human()
human.numOfVacineDose = 3 //accessing the setter method
println("Is human with certificate number {$human.certificateNum} fully protected from the virus: {human.isFullyProtected})
//accessing the getter logic and returning value after execution.
Итак, мы видим, что Kotlin нашел хорошую концепцию, чтобы скрыть и создать более чистый способ написания кода. Логирование, проверка входных данных, преобразование данных и вся эта бизнес-логика может быть легко добавлена к геттерам и сеттерам. Таким образом, вы можете гарантировать, что логика будет выполнена.
Спасибо за прочтение. Удачного кодирования!