En Elixir, si quiero verificar varias condiciones booleanas, en lugar de un lío feo de lógica if/else, puedo hacer esto elegantemente:
guess = 46 number_of_guesses = 3 cond do number_of_guesses > 5 -> IO.puts "Too many guesses! You lose." guess == 46 -> IO.puts "You guessed 46!" guess == 42 -> IO.puts "You guessed 42!" true -> IO.puts "I give up." endEl programa anterior genera el siguiente resultado:
¡Adivinaste 46!
(Ejemplo derivado de Tutorialspoint , pero más elaborado para demostrar que no todas las expresiones deben contener la misma variable).
¿C# tiene algo similar o necesitaría usar if/else?
Si está comparando con un valor en casi todos los casos, aún puede usar una expresión de cambio , con protectores de caso:
int guess = 46; int numberOfGuesses = 3; Console.WriteLine( guess switch { _ when numberOfGuesses > 5 => "Too many guesses! You lose.", 46 => "You guessed 46!", 42 => "You guessed 42!", _ => "I give up." } ); Tenga en cuenta que en el primer brazo, coincidí con cualquier cosa (el patrón de guión bajo _ ) pero solo "cuando el número de conjeturas> 5". O, en este caso, incluso puede hacer una combinación de patrones más elegante:
Console.WriteLine( (guess, numberOfGuesses) switch { (_, > 5) => "Too many guesses! You lose.", (46, _) => "You guessed 46!", (42, _) => "You guessed 42!", _ => "I give up." } );Pero, por supuesto, esto no es posible en todas las situaciones.
Si todos los brazos son condiciones no relacionadas, usar este tipo de construcción _ when ... se siente un poco abusivo, por lo que, alternativamente, puede usar una cadena de operadores ternarios :
var x = condition1 ? someValue1 : condition2 ? someValue2 : condition3 ? someValue3 : valueWhenNoConditionsAreTrue;Aunque siento que incluso esto puede ser un poco sorprendente a primera vista.
Si desea ejecutar declaraciones en esas ramas, en lugar de expresiones, entonces debe usar una estructura if-else-if simple y antigua, o si se puede usar la coincidencia de patrones, una declaración de cambio (pero tenga en cuenta que _ when ... no se puede usar en una declaración de cambio).