Bibliotecas JavaScript como jQuery, combinam 'getters' e 'setters' na interface de programação, por exemplo:
$('element').css({'color','blue'});
irá definir a cor ou
$('element').css();
receberá o css para um elemento.
Existe um nome para esse padrão e é uma boa prática usar em aplicativos?
fonte
É chamado de "sobrecarga de método" em idiomas OO ou "sobrecarga de função" em idiomas não OO.
Se as boas práticas são ou não um tema de quase tanto debate quanto getters / setters vs. membros do público. Aqueles do lado positivo e negativo provavelmente cortam os dentes em idiomas que tinham esse recurso ou não tinham e estão definidos em seus caminhos. Eu o uso e gosto da prática por vários motivos:
get
ouset
ao nome do método adiciona verbosidade.int
e outro paradouble
), alterar o tipo no LHS de uma atribuição (int x = foo.bar()
vs.double x = foo.bar()
) não requer uma alteração de código (barAsInteger()
vs.barAsDouble()
) no lado direito, se a classe fornecer ambos. O lado negativo disso é que, em algum momento, pode ser difícil saber exatamente qual método está sendo chamado apenas olhando o código.fonte
Como o JavaScript não possui propriedades reais (onde a definição de um valor pode realmente executar código), o padrão é aquele que implementa o idioma da propriedade. (Mesmo se você chamar outra coisa.)
Portanto, nas linguagens que implementam propriedades reais, você faria isso:
Se você usasse o padrão JavaScript em um idioma que lida com propriedades, estaria fazendo algo anormal. Provavelmente não seria uma boa ideia. Manipule as propriedades da maneira como o idioma as manipula, para não confundir as outras pessoas que trabalham com você.
fonte
Acho que você está procurando
properties
fonte
person.salary('10000')
ouperson.salary()
ou similar.Sou totalmente contra isso por uma razão simples: uma classe, método ou função deve fazer apenas uma coisa - na minha opinião, e combinar o método
getter
esetter
violará essa regra. Como resultado:return
valor da função varia de acordo com a execução do getter ou bloco do setter . Este pode simplesmente levar você a um pesadelo de manutenção. Seu método deve retornar apenas um tipo de dados / objeto, em qualquer caso - ou o retornonull
,false
ou lançar umaexception
em caso de erro.Blrfl
resposta.fonte