¿Qué nula-cheque es preferible?
Optional.ofNullable(port).ifPresent(settings::setPort);
o
if (port != null) {
settings.setPort(port);
}
En Java, un Optional
valor es una fusión de un bit que indica la presencia o ausencia, con un valor de un tipo de referencia arbitrario T
o una primitiva int
, long
o double
.
La fusión de estos es especialmente útil cuando se devuelva un valor de un método, como métodos tienen sólo un único valor de retorno. A menudo es necesario utilizar un valor especial, como null
en el caso de los tipos de referencia, o -1 en el caso de int
, como centinela para indicar el caso "no-valor". Utilizando Optional
como valor de retorno evita el problema de la persona que llama accidentalmente el mal uso del valor centinela como valor de retorno real.
Dado esto, línea de código tal como
Optional.ofNullable(port).ifPresent(settings::setPort);
es extraño en que se fusiona un valor con el bit presente / ausente en la primera parte de la línea y luego los separa inmediatamente en la segunda parte de la línea. Esto añade complejidad a lo que es en última instancia una tarea bastante sencilla: la comprobación de si port
no es nulo y la realización de alguna acción condicional. El fragmento de código alternativa:
if (port != null) {
settings.setPort(port);
}
expresa con toda claridad exactamente lo que hace.
Es cierto que la sentencia if ocupa un espacio más vertical que la Optional
cadena. La Optional
cadena es más denso, pero también es más difícil de entender: un equilibrio pobre.