Eu me deparei com essa construção em um exemplo Angular e me pergunto por que isso foi escolhido:
_ => console.log('Not using any parameters');
Eu entendo que a variável _ significa não me importo / não usado, mas como é a única variável, há alguma razão para preferir o uso de _ em vez de:
() => console.log('Not using any parameters');
Certamente isso não pode ser cerca de um caractere a menos para digitar. A sintaxe () transmite melhor a intenção na minha opinião e também é mais específica do tipo, porque caso contrário, acho que o primeiro exemplo deveria ser assim:
(_: any) => console.log('Not using any parameters');
Caso seja importante, este foi o contexto onde foi usado:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Respostas:
A razão pela qual este estilo pode ser usado (e possivelmente porque foi usado aqui) é que
_
é um caractere mais curto que()
.Os parênteses opcionais têm o mesmo tipo de problema de estilo que as chaves opcionais . Esta é uma questão de gosto e estilo de código na maior parte, mas a verbosidade é favorecida aqui por causa da consistência.
Embora as funções de seta permitam um único parâmetro sem parênteses, é inconsistente com zero, desestruturação única, descanso único e vários parâmetros:
Embora o
is declared but never used
erro tenha sido corrigido no TypeScript 2.0 para parâmetros sublinhados,_
também pode disparar umunused variable/parameter
aviso de um linter ou IDE. Este é um argumento considerável contra isso._
pode ser usado convencionalmente para parâmetros ignorados (como a outra resposta já explicada). Embora isso possa ser considerado aceitável, esse hábito pode resultar em um conflito com o_
namespace Underscore / Lodash, também parece confuso quando há vários parâmetros ignorados. Por esse motivo, é benéfico ter parâmetros sublinhados corretamente nomeados (com suporte no TS 2.0), também economiza tempo ao descobrir a assinatura da função e por que os parâmetros são marcados como ignorados (isso desafia o propósito do_
parâmetro como um atalho):Pelas razões listadas acima, eu pessoalmente consideraria o
_ => { ... }
estilo de código um tom ruim que deve ser evitado.fonte
(
geralmente vem com um)
. Pessoalmente, prefiro usar op
parâmetro para, também me pergunto se há algum problema de desempenhoNão exatamente.
()
diz que a função não espera nenhum argumento, ela não declara nenhum parâmetro. A função.length
é 0.Se você usar
_
, ele afirma explicitamente que a função receberá um argumento, mas que você não se importa com isso. A função.length
será 1, o que pode ser importante em algumas estruturas.Então, de uma perspectiva de tipo, pode ser a coisa mais precisa a fazer (especialmente quando você não digita com
any
mas, digamos,_: Event
). E como você disse, é um caractere a menos para digitar, o que também é mais fácil de alcançar em alguns teclados.fonte
_
variáveis de função de seta s não utilizadas , me pergunto se há alguma diferença de desempenho em comparação com o uso()
Acho que
_ =>
é usado() =>
porque_
é comum em outras linguagens onde não é permitido apenas omitir parâmetros como em JS._
é popular no Go e também é usado no Dart para indicar que um parâmetro é ignorado e provavelmente outros que não conheço.fonte
_
foi presumivelmente emprestado de linguagens funcionais como ML e Haskell, onde é muito anterior à invenção do Python (sem falar em Go, Dart ou TypeScript).É possível distinguir entre os dois usos, e alguns frameworks usam isso para representar diferentes tipos de callbacks. Por exemplo, acho que o framework nodes express usa isso para distinguir entre tipos de middleware, por exemplo, manipuladores de erros usam três argumentos, enquanto o roteamento usa dois.
Essa diferenciação pode ser semelhante ao exemplo abaixo:
fonte
Quando escrevi o post fiquei com a impressão de que
_
era a única maneira de criar funções de flecha sem()
, o que me levou a acreditar que usar_
poderia ter algumas pequenas vantagens, mas me enganei. @Halt confirmou nos comentários que se comporta como outras variáveis, não é uma construção de linguagem especial.Quero mencionar mais uma coisa que percebi sobre essas funções de seta de sublinhado enquanto me testava e não encontrei mencionado em lugar nenhum. Você pode usar o sublinhado na função como um parâmetro , embora esse provavelmente não seja o uso pretendido, já que ele deve representar um parâmetro não usado. Para maior clareza, eu realmente não recomendo usá-lo dessa forma.
mas pode ser útil saber coisas como codegolf , desafios em que você escreve o código mais curto(parece que você pode usar qualquer caractere sem isso()
). Eu poderia imaginar alguns casos de uso reais em que as bibliotecas usam isso e você precisa usá-lo, mesmo que elas não pretendessem ter essa funcionalidade.Exemplo:
Testado com o console do Chrome, versão 76.0.3809.132 (versão oficial) (64 bits)
fonte
()
antes de fazer este post, pensei que_
era a única maneira, por isso decidi apontar isso. Com isso em mente, não é nada especial para usar, mesmo para jogar golfe, já que você poderia usar apenas um caractere normal. Melhor usado simplesmente para seguir convenções, como você disse.