Nem sempre há uma solução perfeita, mas você tem muitas alternativas para escolher:
-
Use argumentos nomeados , se disponíveis no seu idioma. Isso funciona muito bem e não tem desvantagens específicas. Em alguns idiomas, qualquer argumento pode ser passado como um argumento nomeado, por ex.
updateRow(item, externalCall: true)
( C # ) ouupdate_row(item, external_call=True)
(Python).Sua sugestão para usar uma variável separada é uma maneira de simular argumentos nomeados, mas não tem os benefícios de segurança associados (não há garantia de que você usou o nome correto da variável para esse argumento).
-
Use funções distintas para sua interface pública, com nomes melhores. Esta é outra maneira de simular parâmetros nomeados, colocando os valores do paremetro no nome.
Isso é muito legível, mas leva muito clichê para você, que está escrevendo essas funções. Também não pode lidar bem com a explosão combinatória quando há vários argumentos booleanos. Uma desvantagem significativa é que os clientes não podem definir esse valor dinamicamente, mas devem usar if / else para chamar a função correta.
-
Use um enum . O problema com os booleanos é que eles são chamados "true" e "false". Então, em vez disso, introduza um tipo com nomes melhores (por exemplo,
enum CallType { INTERNAL, EXTERNAL }
). Como um benefício adicional, isso aumenta o tipo de segurança do seu programa (se o seu idioma implementa enums como tipos distintos). A desvantagem de enums é que eles adicionam um tipo à sua API publicamente visível. Para funções puramente internas, isso não importa e os enums não têm desvantagens significativas.Em idiomas sem enums, às vezes são usadas strings curtas . Isso funciona e pode até ser melhor do que booleanos crus, mas é muito suscetível a erros de digitação. A função deve então afirmar imediatamente que o argumento corresponde a um conjunto de valores possíveis.
Nenhuma dessas soluções tem um impacto de desempenho proibitivo. Parâmetros nomeados e enums podem ser resolvidos completamente em tempo de compilação (para uma linguagem compilada). O uso de strings pode envolver uma comparação de strings, mas o custo disso é insignificante para literais de string pequenos e para a maioria dos tipos de aplicativos.