Отримання та встановлення змінних у межах класів стосується або отримання ("отримання"), або зміни ("налаштування") їх вмісту.
Розглянемо змінну membersкласу family. Природно, ця змінна повинна бути цілим числом, оскільки сім'я ніколи не може складатися з двох точок чогось люди.
Отже, ви, ймовірно, будете продовжувати, визначаючи membersподібну змінну:
class family {
var members:Int
}
Це, однак, дасть людям, які використовують цей клас, можливість встановити кількість членів родини приблизно як 0 або 1. І оскільки немає такої речі, як сім'я 1 або 0, це дуже прикро.
Тут надходять геттери та сетери. Таким чином ви можете самостійно вирішити, як можна змінювати змінні та які значення вони можуть отримувати, а також вирішувати, який вміст вони повертатимуть.
Повертаючись до нашого сімейного класу, давайте переконайтеся, що ніхто не може встановити membersзначення на значення менше 2:
class family {
var _members:Int = 2
var members:Int {
get {
return _members
}
set (newVal) {
if newVal >= 2 {
_members = newVal
} else {
println('error: cannot have family with less than 2 members')
}
}
}
}
Тепер ми можемо отримати доступ до membersзмінної, як і раніше, ввівши instanceOfFamily.members, і завдяки функції setter ми також можемо встановити її значення, як і раніше, ввівши, наприклад:instanceOfFamily.members = 3 . Однак, що змінилося, це той факт, що ми не можемо встановити цю змінну більше ніж 2.
Зверніть увагу на введення _membersзмінної, яка є фактичною змінною для зберігання значення, яке ми встановили за допомогою membersфункції сеттера. Оригінал membersтепер став обчисленою властивістю, це означає, що він діє лише як інтерфейс для обробки нашої фактичної змінної.