Lidando com parâmetros obrigatórios em JavaScript

(Last Updated On: 31 de Janeiro de 2018)

É bem comum o desenvolvedor JavaScript precisar testar a obrigatoriedade de parâmetros das funções que cria. Vejamos um exemplo:

function moveFrame(from, to) {
	
	if(!from) throw new Error('Parâmetro "from" obrigatório');
	if(!to) throw new Error('Parâmetro "to" obrigatório');

	// realiza a lógica de mudança de frame

Excelente, mas se nossa função tiver cinco parâmetros obrigatórios, teremos que repetir cada instrução if cinco vezes. A boa notícia é que podemos utilizar um recurso adicionado no ES2015 (ES6) já consolidado entre os navegadores para tornar nosso código menos verboso e elegante. Primeiro, vejamos que recurso é este:

Parâmetro padrão (default parameter)

Temos como exemplo a função temporizador que executará uma função depois da quantidade de milissegundos definida pelo usuário:

function temporizador(fn, milissegundos) {
	
	setTimeout(fn, milissegundos);
}

temporizador(() => console.log('Função executada!'), 3000);

Muito bom, mas o programador terá que passar toda vez, como último parâmetro, a quantidade de milissegundos. Que tal adotarmos um valor padrão caso o parâmetro não tenha sido definido?

Alterando nossa função temos:

function temporizador(fn, milissegundos) {

	milissegundos = milissegundos || 1000;

	setTimeout(fn, milissegundos);
}

// não passamos mais o tempo
temporizador(() => console.log('Função executada!'));

O valor de milissegundos será 1000 caso seu valor seja avaliado como false. Em JavaScript, undefined, null, "" e 0 são avaliados como false.

No entanto, podemos simplificar bastante nosso código atribuindo um valor padrão diretamente no parâmetro, novidade do ES2015 (ES6):


function temporizador(fn, milissegundos = 1000) {

	setTimeout(fn, milissegundos);
}

temporizador(() => console.log('Função executada!'));

Na própria declaração do parâmetro milissegundos atribuímos seu valor padrão, que só será considerado caso ele tenha sido omitido. Muito mais enxuto, não?

Agora que já entendemos como valores padrões são definidos na linguagem JavaScript, podemos utilizar esse recurso para tornar parâmetros obrigatórios.

Parâmetros obrigatórios com ajuda de parâmetros padrão

Vamos voltar para a função moveFrame, apresentada no início do artigo:

function moveFrame(from, to) {
	
	if(!from) throw new Error('Parâmetro "from" obrigatório');
	if(!to) throw new Error('Parâmetro "to" obrigatório');

	// realiza a lógica de mudança de frame
}

Podemos simplificá-la bastante estruturando nosso código da seguinte maneira:


function obrigatorio(parametro) {
	throw new Error(`O parâmetro ${parametro} é obrigatório.`);
}

function moveFrame(from=obrigatorio('from'), to=obrigatorio('to')) {

	// realiza a lógica de mudança de frame
}

Reparem que o valor padrão dos dois parâmetros da função moveFrame é a chamada da função obrigatorio, isto é, ela só será chamada se alguns dos parâmetros não forem definidos. A única responsabilidade de obrigatorio será lançar uma exceção indicando a obrigatoriedade dos parâmetros. Inclusive, essa mesma função pode ser reutilizada por outras funções do sistema.

Conclusão

Combinar diferentes recursos para criar uma nova funcionalidade faz parte da arte da programação de todo Cangaceiro JavaScript! Aliás, a Alura possui cursos de front-end que podem ajudá-lo a ficar ainda melhor em JavaScript e outros tópicos.

E você? Já utilizava esse recurso? Compartilhe sua experiência conosco!

Twitter: @flaviohalmeida

FIQUE POR DENTRO

Flávio Almeida é desenvolvedor e instrutor na Caelum e no Alura. Autor do livro MEAN "Full stack JavaScript para aplicações web com MongoDB, Express, Angular e Node", possui mais de 15 anos de experiência na área de desenvolvimento. Bacharel em Informática com MBA em Gestão de Negócios em TI, tem Psicologia como segunda graduação e procura aplicar o que aprendeu no desenvolvimento de software e na educação. Atualmente foca na plataforma Node.js e na linguagem JavaScript, tentando aproximar ainda mais o front-end do back-end. Já palestrou e realizou workshops em grandes conferências como QCON e MobileConf e esta sempre ávido por novos eventos.

  • Claudenir Freitas

    interessante, nunca tinha pensando em utilizar desta forma… Massa!

  • Mario Cesar Junior Costa

    A “gambiarra” mais daora de 2018! realmente muito bom.

  • Patrick Monteiro

    Eu achei isso fascinante ! hahaha

Próximo ArtigoAutomatizando tarefas com Shell Script