c# - poner - guion bajo y arroba
_=> ¿Qué significa este guión bajo en las expresiones de Lambda? (5)
Debido a que la expresión lamda se usa principalmente en un código corto y anónimo, de modo que el nombre de la variable a veces no es necesario, incluso ellos no usan la variable en el bloque de código, por lo que simplemente dan un _ por una breve convención.
¿Qué significa una expresión lambda como _=> expr
?
¿Cuál es el propósito de _
como entrada para lambda?
Ejemplo:
int count = 0;
list.ForEach(_ => count += 1);
Es un nombre de parámetro, aunque no útil, pero es el utilizado normalmente (según algunas convenciones) cuando necesita especificar que la expresión tiene un parámetro para compilar el código, pero realmente no le importa al respecto, por lo que simplemente va a ignorarlo.
Básicamente explota la sintaxis de lo que constituye un identificador legal en C #, y dado que un identificador puede comenzar con un guión bajo y no contener nada más, es solo un nombre de parámetro.
Podrías haber escrito fácilmente:
var _ = 10;
Esa es una convención utilizada cuando no te importa el parámetro.
También _ => _.method()
el uso de _ => _.method()
para una línea, call-call lambdas, ya que reduce el peso cognitivo de la instrucción. Especialmente cuando se usan genéricos, escribir x => x.method()
solo agrega la consideración de "¿Qué es esta ''x''? ¿Es una coordenada en el espacio?".
Considere el siguiente caso:
Initialize<Client> ( _=>_.Init() );
Usado con una llamada a Generics, el guión bajo en este caso funciona como un "símbolo de derivación". Evita la redundancia, ya que define que el tipo de argumento es obvio y puede inferirse del uso, al igual que cuando se usa ''var'' para evitar repetir una declaración de tipo. Escribir client=>client.Init()
aquí solo haría que la instrucción sea más larga sin agregarle ningún significado.
Obviamente, esto no se aplica a los parámetros que se pasarán al método, que debe denominarse descriptivamente. Ej .: Do( id=>Log(id) );
El uso de parámetros de un solo guión bajo para las llamadas a métodos no es justificable cuando se usa un bloque de código en lugar de un único liner, ya que el identificador lambda se desconecta de su definición de genéricos. En general, cuando se va a reutilizar el mismo identificador, dele un nombre descriptivo.
La conclusión es que la verbosidad solo es justificable para la desambiguación, especialmente para las lambdas, que fueron creadas para simplificar la creación anónima de delegados en primer lugar. En cualquier caso, debe usarse el sentido común, equilibrando la legibilidad y la concisión. Si el símbolo es solo un "gancho" para la funcionalidad real, los identificadores de un solo carácter están perfectamente bien. Ese es el caso con For-Loops y las letras "i" y "j" como indexadores.
_
es un nombre de variable válido. Simplemente están usando _
como una variable.