Hola tengo dos muestras de código
if / else if / else
private Object getObj(message) {
if (message.getA() != null)
return message.getA();
else if (message.getB() != null)
return message.getB();
else if (message.getC() != null)
return message.getC();
else return null;
}
declaraciones opcionales
private Optional<Object> wrap(Object o){
return Optional.ofNullable(o);
}
private Object getObj(message) {
return wrap(message.getA())
.orElseGet(() -> wrap(message.getB())
.orElseGet(() -> wrap(message.getC())
.orElse(null)));
}
Así que mi pregunta es cómo estos dos se comparan en términos de rendimiento (tengo unos 15-20 else if-en código real)?
¿Vale la pena refactorización la legibilidad del código vs rendimiento o es un mal uso de opcionales?
También lo es la penalización de rendimiento en caso de que el if / else if-cultivadas a más de 100?
Gracias por adelantado
No utilice Optional
s para la lógica condicional.
Fueron diseñados, para ser devueltos a partir de un método para indicar un valor potencialmente ausente .
El hecho de que muy bien les puede encadenar en una sola línea, no significa que es comprensible. También que, literalmente, no gana nada. La sobrecarga de rendimiento puede ser significativo. En los peores casos de N
objetos que están siendo creados y luego se descarta. Sólo se mantenga con sus "normales" if-else
cadenas.
En lugar de encontrar maneras de hacer su código actual sea más legible, tomar un paso atrás y preguntarse por qué necesita 15-20 declaraciones if-else. Se puede dividir un poco de lógica para arriba? ¿Por qué necesita un captador durante tantos campos diferentes con diferentes tipos potencialmente en el primer lugar? etcétera