Me encontré con esta construcción en un ejemplo angular y me pregunto por qué se elige esto:
_ => console.log('Not using any parameters');
Entiendo que la variable _ significa que no me importa / no se usa, pero dado que es la única variable, ¿hay alguna razón para preferir el uso de _ sobre:
() => console.log('Not using any parameters');
Seguramente esto no puede ser un carácter menos para escribir. La sintaxis () transmite mejor la intención en mi opinión y también es más específica del tipo porque, de lo contrario, creo que el primer ejemplo debería haberse visto así:
(_: any) => console.log('Not using any parameters');
En caso de que importe, este fue el contexto en el que se utilizó:
submit(query: string): void {
this.router.navigate(['search'], { queryParams: { query: query } })
.then(_ => this.search());
}
Respuestas:
La razón por la que se puede usar este estilo (y posiblemente la razón por la que se usó aquí) es que
_
es un carácter más corto que()
.Los paréntesis opcionales caen en el mismo problema de estilo que los corchetes opcionales . Esto es una cuestión de gusto y estilo de código en su mayor parte, pero aquí se favorece la verbosidad debido a la coherencia.
Si bien las funciones de flecha permiten un solo parámetro sin paréntesis, es inconsistente con cero, solo desestructurado, solo descanso y múltiples parámetros:
Aunque se corrigió el
is declared but never used
error en TypeScript 2.0 para los parámetros subrayados,_
también puede activar unaunused variable/parameter
advertencia de un linter o IDE. Este es un argumento considerable en contra de hacer esto._
se puede usar convencionalmente para parámetros ignorados (como la otra respuesta ya se explicó). Si bien esto puede considerarse aceptable, este hábito puede resultar en un conflicto con el_
espacio de nombres de subrayado / Lodash, también parece confuso cuando hay varios parámetros ignorados. Por esta razón, es beneficioso tener los parámetros subrayados correctamente nombrados (admitidos en TS 2.0), también ahorra tiempo en descubrir la firma de la función y por qué los parámetros se marcan como ignorados (esto desafía el propósito del_
parámetro como un atajo):Por las razones enumeradas anteriormente, personalmente consideraría el
_ => { ... }
estilo del código como un mal tono que debería evitarse.fuente
(
normalmente viene con un)
. Personalmente prefiero usarp
para el parámetro, también me pregunto si tiene algún problema de rendimientoNo exactamente.
()
dice que la función no espera ningún argumento, no declara ningún parámetro. La función.length
es 0.Si lo usa
_
, indica explícitamente que a la función se le pasará un argumento, pero que no le importa. La función.length
será 1, lo que puede ser importante en algunos marcos.Entonces, desde una perspectiva de tipografía, podría ser algo más preciso (especialmente cuando no lo escribe con
any
pero, digamos_: Event
). Y como dijiste, es un carácter menos para escribir, lo que también es más fácil de alcanzar en algunos teclados.fuente
_
variables de función de flecha s no utilizadas , me pregunto si hay alguna diferencia de rendimiento en comparación con el uso()
Supongo que
_ =>
se acaba de usar() =>
porque_
es común en otros lenguajes donde no se permite simplemente omitir parámetros como en JS._
es popular en Go y también se usa en Dart para indicar que se ignora un parámetro y probablemente otros que no conozco.fuente
_
presumiblemente fue tomado de lenguajes funcionales como ML y Haskell, donde es anterior a la invención de Python (por no hablar de Go, Dart o TypeScript).Es posible distinguir entre los dos usos, y algunos marcos lo utilizan para representar diferentes tipos de devoluciones de llamada. Por ejemplo, creo que el marco expreso de nodos usa esto para distinguir entre tipos de middleware, por ejemplo, los controladores de errores usan tres argumentos, mientras que el enrutamiento usa dos.
Dicha diferenciación puede parecerse al ejemplo siguiente:
fuente
Cuando escribí la publicación, tenía la impresión de que
_
era la única forma de crear funciones de flecha sin ellas()
, lo que me llevó a creer que el uso_
podría tener algunas ventajas menores, pero estaba equivocado. @Halt ha confirmado en los comentarios que se comporta como otras variables, no es una construcción de lenguaje especial.Quiero mencionar una cosa más de la que me di cuenta acerca de estas funciones de flecha de subrayado mientras me probaba a mí mismo que no encontré mencionado en ninguna parte. Usted puede utilizar el subrayado en la función como un parámetro , aunque este uso probablemente no se pretende ya que se supone que representa un parámetro no utilizado. Para mayor claridad, realmente no recomendaría usarlo de esta manera.
pero puede ser útil saber para cosas como codegolf , desafíos donde escribes el código más corto(resulta que puedes usar cualquier carácter sin él()
). Podría imaginar algunos casos de uso reales en los que las bibliotecas usan esto y usted necesita usarlo incluso si no tenían la intención de esa funcionalidad.Ejemplo:
Probado con la consola Chrome, versión 76.0.3809.132 (compilación oficial) (64 bits)
fuente
()
antes de hacer esta publicación, pensé que_
era la única forma de hacerlo, por eso decidí señalar esto. Con esto en mente, resulta que no es nada especial para usar incluso para jugar al golf, ya que podría usar un personaje normal. Es mejor usarlo simplemente para seguir convenciones, como dijiste.