Javascript, Sobrecarregando Métodos

Lá estava eu navegando internet a dentro quando me deparei com um artigo muito, mais muito interessante, talvez só pra mim, mais mesmo assim interessante.

Sobrecarregar métodos em javascript, mais como assim ?

Quem nunca passou pelo seguinte problema:

Função 1 = Função 2, só que função 1 preciso passar id e função 2 preciso passar id e nome, então o que voce faz ? POG, normalmente cria-se duas funções ou realiza a famosa pergunta “empty ?” (vazio ?), e como não é possível o sobrecarregamento de métodos no javascript diferente do que acontece por exemplo no java, isso se tornava inviável a medida que os parametros cresciam.

Pensando nisso um sujeito de nome John Resig procurou uma solução alternativa e encontrou, veja a seguir a solução:

// addMethod - By John Resig (MIT Licensed)
function addMethod(object, name, fn){
var old = object[ name ];
object[ name ] = function(){
if ( fn.length == arguments.length )
return fn.apply( this, arguments );
else if ( typeof old == 'function' )
return old.apply( this, arguments );
};
}

A grande sakada de John Resing foi o length destacado no código, pois ele simplesmente pega o tamanho da função usando o próprio length retornando o tamanho dos argumentos que estão sendo passados, tá, mais qual a sacada ? Você sabia que dava para resgatar o tamanho de uma função utilizando o length ? se é o cara.

Ao que interessa, vamos a um exemplo prático:

A situação é a seguinte, eu tenho uma classe Usuario e gostaria de criar um método de Busca, podendo buscar Todos Usuários, Usuários determinado Nome, e Usuários com determinado nome e com status Ativo, sendo assim temos nossa classe usuário da seguinte forma:

function Usuario(){

addMethod(this, "buscar", function()
{
// Código da busca por todos Usuário
});

addMethod(this, "buscar", function(nome)
{
// Código da busca por todos Usuário com certo Nome
});

addMethod(this, "buscar", function(nome,status)
{
// Código da busca por todos Usuário com certo Nome
// e Status Ativo
});

}

Veja que interessante, dentro da classe Usuario temos a chamada do addMethod passando como parametro o objeto (Usuario), o nome da função a ser adicionada (busca) e a definição dos campos da função (os argumentos de cada uma), para entender melhor ai vai o exemplo:

var usuario = new Usuario();

usuario.buscar();
// Chama a função busca da classe Usuario
// A função busca é chamada sem passar argumentos
// Serão retornados todos os usuários encontrados

usuario.buscar("John");
// Chama a função busca da classe Usuario
// A função busca é chamada passando um argumento
// Serão retornados todos os usuários com nome John

usuario.buscar("John", "A");
// Chama a função busca da classe Usuario
// A função busca é chamada passando dois argumentos
// Serão retornados todos os usuários com nome John
// e Status = A

usuario.buscar("John", "A", "007");
// Chama a função busca da classe Usuario
// A função busca é chamada passando três argumento
// Como não foi adicionado nenhum método com três
// argumentos, então nada será retornado

Esses três exemplos expressam bem a utilização o Overloading/Sobrecarregamento de métodos que ele desenvolveu de forma simplificada, garanto que isso será de muita serventia para meus humildes códigos.

Referência:

Ajaxian : JavaScript Method Overloading


One Comment on “Javascript, Sobrecarregando Métodos”

  1. Rogério disse:

    Massa demais isso hein John.

    Agora sai da internet e vai caçar um serviço.

    vlw!!!


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s