Para la gran mayoría de código que ISN No es sensible al rendimiento, hay muchas razones por las que desea utilizar la coincidencia de patrones en if/else:
- se impone un valor de retorno común y tipo para cada una de sus ramas
- en idiomas con los controles de exhaustividad (como Scala), obliga a considerar de forma explícita todos los casos (y Noop los que no es necesario)
- se previene las devoluciones anticipadas, que se vuelven más difíciles de razonar si se multiplican en cascada, o las ramas crecen más que la altura de la pantalla (momento en el que se vuelven invisibles). Tener un nivel extra de sangría te avisará que estás dentro de un alcance.
- puede ayudarle a identificar la lógica para extraer. En este caso, el código podría haber sido reescrito y hecho más SECO, depurable y comprobable como esto:
val errorMessage = user.password == enteredPassword match {
case true => "User is authenticated"
case false => "Entered password is invalid"
}
println(errorMesssage)
Aquí hay un equivalente if/else aplicación de bloque:
var errorMessage = ""
if(user.password == enteredPassword)
errorMessage = "User is authenticated"
else
errorMessage = "Entered password is invalid"
println(errorMessage)
Sí, se puede argumentan que para algo tan simple como una verificación booleana puede usar una expresión if. Pero eso no es relevante aquí y no se adapta bien a las condiciones con más de 2 ramas.
Si su mayor preocupación es el mantenimiento o la legibilidad, la coincidencia de patrones es increíble y debe usarlo incluso para cosas menores.
Estoy bajo impresión de coincidencia de patrón. Creo que es por eso que estoy tratando de usarlo en todas partes :) Gracias, seguiré tu consejo. – Soteric
@Soteric Esa es una fase común para los programadores de Scala. Pasarás por otras fases peores. :-) –
@Daniel ¿Te gusta tener firmas de tipo que abarcan varias líneas? – ziggystar