A obtenção e configuração de variáveis dentro das classes refere-se a recuperar ("obter") ou alterar ("definir") seus conteúdos.
Considere uma variável members
de uma classe family
. Naturalmente, essa variável precisaria ser um número inteiro, já que uma família nunca pode consistir em dois pontos e algo pessoas.
Portanto, você provavelmente iria em frente definindo a members
variável assim:
class family {
var members:Int
}
Isso, no entanto, dará às pessoas que usam essa classe a possibilidade de definir o número de membros da família em algo como 0 ou 1. E, como não existe família de 1 ou 0, isso é lamentável.
É aqui que entram os getters e setters. Dessa forma, você pode decidir por si mesmo como as variáveis podem ser alteradas e quais valores elas podem receber, bem como decidir qual conteúdo elas retornam.
Voltando à nossa aula de família, vamos ter certeza de que ninguém pode definir o members
valor para nada menos do que 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')
}
}
}
}
Agora podemos acessar a members
variável como antes, por digitação instanceOfFamily.members
, e graças à função setter, também pode configurá-lo de valor como antes, por digitação, por exemplo: instanceOfFamily.members = 3
. O que mudou, entretanto, é o fato de que não podemos mais definir essa variável para nada menor que 2.
Observe a introdução da _members
variável, que é a variável real para armazenar o valor que definimos por meio da members
função setter. O original members
agora se tornou uma propriedade computada, o que significa que ele age apenas como uma interface para lidar com nossa variável real.