Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda