Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
Java 8 ifPresent vs operador ternario

¿Qué crees que es mejor (con argumentos, por supuesto):

 Optional.ofNullable( userName ) .ifPresent( nonNullUserName -> header.setUser( createUser( nonNullUserName ) ) );

o

 header.setUser( userName == null ? createUser( userName ) : null );

El método createUser crea un elemento xml y la intención de todo el código es establecerlo en una solicitud SOAP dependiendo de la presencia de userName .

Los beneficios del primer enfoque que veo es la ausencia de operaciones inútiles, el código hace una cosa y nada más. Pero el segundo enfoque le permite guardar una línea más de código, por lo que parece más lacónico.

ACTUALIZACIÓN: Supongo que me perdí algo que realmente insinué y causó cierto malentendido. Sería mejor proporcionar ejemplos más limpios con explicaciones si tiene algunos.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Optional fue diseñado para usarse como un tipo de retorno para métodos que no siempre pueden devolver un valor, como por ejemplo getFirstElementOfAList() , que no puede devolver nada más si la lista está vacía: devolver un valor nulo sería menos claro que devolver un vacío Opcional, y podría significar que el primer elemento es nulo, y no que no hay ningún primer elemento.

Los diseñadores no tienen la intención de que Optional se use como una construcción conveniente para encadenar métodos. Vea la presentación de Stuart Marks (que trabaja en el JDK), y especialmente lo que dice en el minuto 28:

Generalmente es una mala idea crear un Opcional para el propósito específico de encadenar métodos [...]

Por supuesto, eres libre de faltarle el respeto al diseño previsto y las mejores prácticas, pero tus colegas también pueden odiarte por eso :-)

Tenga en cuenta que los dos fragmentos que publicó no hacen lo mismo. El primero no hace nada si el nombre de usuario es nulo, mientras que el segundo establece el usuario en nulo (lo que a su vez podría generar una excepción o sobrescribir el valor anterior)

Simplemente usaría (asumiendo que lo que quieres es la primera versión):

 if (userName != null) { header.setUser(createUser(userName)); }

que es extremadamente claro, no abusa de Opcional y no crea una instancia Opcional solo para encadenar métodos.

over 4 years ago · Santiago Trujillo Denunciar

0

Son cosas diferentes, uno es un Object , otro es un operador. no deberías comparar entre ellos. el primer enfoque se puede simplificar a esto, que será más legible y describible :

 Optional.ofNullable(userName).map(this::createUser).ifPresent(header::setUser);

SI realmente desea compararlos, el único diferente es el que se mencionó anteriormente. y si procesa la condición o resulta más complejo en un operador, el resultado será que la expresión es demasiado compleja para leer.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda