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 membersde 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 membersvariá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 membersvalor 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 membersvariá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 _membersvariável, que é a variável real para armazenar o valor que definimos por meio da membersfunção setter. O original membersagora se tornou uma propriedade computada, o que significa que ele age apenas como uma interface para lidar com nossa variável real.