Variáveis de classe no X++ não aceitam “access modifiers” e são sempre privadas. Ou seja, uma variável declarada no class declaration só acessivel dentro da própria classe.
No C#, ou no VB, nós temos as propriedades para dar acesso externo as variáveis de classe. Já no Java é comum criar método GetVariavel e SetVariavel para isto. No X++ o padrão é criar um método parmVariavel que oferece ao mesmo tempo acesso de leitura e de escrita na variável.
A classe Person abaixo, por exemplo, tem duas variáveis de classe: name e birthDate
class Person
{
str name;
date birthdate;
}
Se preciso expor estas variáveis para o mundo externo, faço um método parm como este:
public str parmName(str _name = name)
{;
name = _name;
return name;
}
O método recebe como parâmetro opcional o nome. Cujo o valor default é o nome atual. Veja como é fácil, alterar e ler a variável:
Person person;
;
person = new Person('José', 21\2\1998);
person.parmName('João');
print person.parmName();
pause;
Mesmo inicializando o objeto com o nome ‘José’, consigo alterar o nome para ‘João’. Agora em alguns casos não quero permitir alteração da variável, apenas leitura. Veja por exemplo o método parmAge, ele retorna a idade, baseado na data de nascimento. Só que não recebe parâmetro, pois esta é uma variável que não quero alterar.
public int parmAge()
{;
return yearDiff(today(), birthDate);
}
A leitura do método continua normal.
static void Job1(Args _args)
{
Person person;
;
person = new Person('José', 21\2\1998);
person.parmName('João');
print person.parmName();
print person.parmAge();
pause;
}
Como boa prática só devemos expor as variáveis somente quando realmente precisamos usar. Neste post explico um pouco melhor o porque desta prática.