Muchos tipos de miembros de estructuras y clases (los campos son la principal excepción) pueden usar la sintaxis de miembros con cuerpo de expresión. Definir un miembro con una expresión suele producir código más conciso y legible que los bloques y sentencias tradicionales.
Los métodos y las propiedades de solo lectura están entre los miembros que se pueden definir con cuerpos de expresión.
public int Times3(int input) => input * 3;
public int Interesting => 1729;
Una expresión switch puede hacer coincidir un valor con uno de los casos de un conjunto de patrones y devolver el valor asociado o realizar la acción asociada. La asociación se indica con el símbolo =>. Además, cada patrón puede tener una protección de caso opcional, introducida con la palabra clave when. La expresión de la protección de caso debe evaluarse como true para que se seleccione esa «rama» del switch. Los casos (también conocidos como ramas del switch) se evalúan en el orden en que aparecen en el texto, y el proceso se interrumpe y se devuelve el valor asociado en cuanto se encuentra una coincidencia.
double xx = 42d;
string interesting = xx switch
{
0 => "I suppose zero is interesting",
3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
3.14 => "π",
42 => "a bit of a cliché",
1729 => "only if you are a pure mathematician",
_ => "not interesting"
};
// => interesting == "a bit of a cliché"
Los operadores ternarios permiten definir condiciones if dentro de expresiones en lugar de en bloques de sentencias. Esto se parece a los enfoques de la programación funcional y, a menudo, puede hacer que el código sea más expresivo y menos propenso a errores.
El operador ternario combina 3 expresiones: una condición seguida de una expresión que se evalúa y se devuelve si la condición es verdadera (la parte if, introducida por ?) y una expresión que se evalúa y se devuelve si la condición es falsa (la parte else, introducida por :).
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
Las expresiones throw son una alternativa a las sentencias throw y, en particular, pueden aumentar la potencia de las expresiones ternarias y de otras expresiones compuestas.
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
Te han pedido que mejores algo de código heredado relacionado con una estación meteorológica.
La estación meteorológica acepta lecturas y produce algunos indicadores, como la temperatura y la presión.
Refactoriza los métodos adecuados de la clase WeatherStation usando miembros con cuerpo de expresión. Usa operaciones ternarias y expresiones switch donde corresponda para mejorar la expresividad y, potencialmente, reducir los errores.
Asegúrate de que todos los tests sigan pasando.
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.