Отримання та встановлення змінних у межах класів стосується або отримання ("отримання"), або зміни ("налаштування") їх вмісту.
Розглянемо змінну 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
тепер став обчисленою властивістю, це означає, що він діє лише як інтерфейс для обробки нашої фактичної змінної.