Escrever funções legíveis, fáceis de entender, reutilizáveis e simples de se usar é uma ótima prática em qualquer linguagem de programação. O Javascript com options object é uma das estratégias pra se fazer isso usando o design pattern.
Usando options object, funções tem como parâmetro apenas um objeto que possui todos os argumentos, isso traz algumas vantagens sobre o modo padrão e mais comumente usado, os parâmetros têm os nomes mais visíveis para outras pessoas lendo o código, facilita o uso de argumentos padrão e a função fica mais resiliente às mudanças.
Usando Javascript com options object na prática
Como exemplo, vamos declarar uma função de criação de um usuário. Ela não precisa receber a data de nascimento ou CPF e tem por padrão o envio de materiais de marketing como verdadeiro.
Ao chamar essa função, alguns problemas são muito aparentes, os primeiros argumentos são fáceis de se identificar, porém, passar undefined como argumento é péssimo para a legibilidade, inconveniente, além de abrir uma porta para comportamentos inesperados e o false não diz muito sobre seu significado sem documentação, ou uma análise da declaração da função, qualquer pessoa lendo isso pela primeira vez vai ter dificuldade de entender o que cada parâmetro é:
Redeclarando essa função usando um option object, conseguimos resolver esses problemas:
Agora,quando esperamos usar os argumentos padrão, não é necessário colocar undefined em nenhuma posição, o booleano sobre recebimento de marketing é claro sem necessidade de mais nenhuma informação e caso seja necessário adicionar mais parâmetros, não há preocupação em precisar alterar todas as outras chamadas para ela (por esse mesmo motivo, alterações devem ser feitas com precaução).
Como um exemplo do mundo real, a biblioteca axios utiliza esse design pattern extensivamente, uma implementação que mostra o tamanho do impacto de uma mudança simples.
Onde não usar Javascript com options object
Assim como qualquer outro design pattern, options object não é uma bala de prata e apesar de ser muito útil,deve ser usado com precaução e onde sua aplicação faz sentido, funções que tem um nome expressivo e recebem apenas um argumento, sem expectativa de mudança são um exemplo onde esse pattern mais atrapalha que ajuda.
Nessa função é muito claro que o único argumento passado deve ser o id de um usuário, usar um options object apenas deixaria ela mais verbosa:
Conclusão
Escrever boas funções é um grande desafio, e conhecer novas ferramentas pra isso ésempre útil espero ter ajudado com um novo conhecimento. Aproveito para recomendar mais textos em nosso blog, como este sobre funções de ordem superior em Javascript. Vale a pena conferir!