← Back to list

Eleve seu código para outro patamar com Optional

Alinhe seu código com os princípios da programação funcional. Use Optional em Java para solucionar problemas com valores nulos e também…

Junior Martins · 2024-01-11 14:13 · 0 claps · 2.5 min read
#java #programação-funcional #programação
Open on Medium ↗

Eleve seu código para outro patamar com Optional

Alinhe seu código com os princípios da programação funcional. Use Optional em Java para solucionar problemas com valores nulos e também explorar a criação de pipelines de operações. Ao entender a relação do Optional com a programação funcional, os developers podem elevar sua programação para outro patamar de concisão e segurança. O Optional não proporciona apenas uma melhoria técnica, quando substitui métodos tradicionais de verificação de valores nulos, mas oferece melhoria robusta na legibilidade e na manutenção do código.

Veja quais são os principais métodos do Optional: of(); ofNullable(); isPresent(); ifPresent(); orElse(); orElseGet(); orElseThrow(); ifPresentOrElse(); get(), empty().

1) Optional.of(“valor”) — cria Optional com valor não nulo ou, caso nulo, lança NullPointerException.

Optional<String> optional = Optional.of(“Valor presente”);

2) Optional.ofNullable(“valor”) — cria Optional que pode conter valor nulo.

Optional<String> optional = Optional.ofNullable(null);

3) optional.isPresent() — verifica se o Optional contém valor não nulo.

Optional<String> optional = Optional.of(“Valor presente”);

if (optional.isPresent()) {

// Faça algo com o valor

} else {

// Faça algo com a ausência do valor

}

4) optional.ifPresent() — executa bloco de código se o Optional contiver valor não nulo.

optional.ifPresent(valor -> System.out.printf(“Valor presente: %s”, valor));

5) optional.orElse() — fornece valor padrão se o Optional estiver vazio.

String valor = optional.orElse(“Valor padrão”);

6) optional.orElseGet() — retorna o valor do Optional se estiver presente. Do contrário, retorna o resultado de um Lambda ou Reference Method.

String resultado = optionalValue.orElseGet(() → “Valor padrão com Lambda”);

String resultado = optionalValue.orElseGet(OptionalExample::getDefault);

7) optional.orElseThrow() — lança exceção específica se Optional estiver vazio.

String resultado = optional.orElseThrow(() -> new NoSuchElementException(“Valor ausente”));

8) Optional.empty() — cria Optional vazio.

Optional<String> resultado = Optional.empty();

9) optional.ifPresentOrElse() — permite executar uma ação específica se o Optional contiver valor e permite executar ação alternativa se estiver vazio.

optionalValue.ifPresentOrElse(

value → System.out.println(“Valor presente: “ + value),

() → System.out.println(“Valor ausente“)

);

10) optional.get() — é usado para obter o valor contido no Optional. Porém, se o Optional estiver vazio, será lançada uma exceção NoSuchElementException.

String valor = optionalValue.get();

Ao usar Optional, desenvolvedores escrevem código mais declarativo, que expressa melhor a lógica em termos de transformações e operações sobre dados, sem a necessidade de lidar diretamente com valores nulos. A capacidade de criar pipelines de operações é uma de suas características mais poderosas. E são vários os métodos oferecidos pelo Optional capazes de substituir práticas tradicionais, como, por exemplo: trocar operador ternário por ofNullable().orElse(); ou trocar If por ifPresente(), entre outros.

Agora veja exemplos de substituição e de pipeline:

  1. Substituitr Operador Ternário por orElse():

String resultado = (valor != null) ? valor : “Valor Padrão”;

String resultado = Optional.ofNullable(valor).orElse(“Valor Padrão”);

  1. Substituir if por ifPresent():

if (valor != null) {

System.out.println(“Valor: “ + valor);

}

Optional.ofNullable(valor).ifPresent(v -> System.out.println(“Valor: “ + v));

  1. O melhor de tudo é poder encadear vários desses métodos para formar pipelines:

Optional<String> resultado = Optional.of(“Este é um valor não nulo”)

.map(valor -> transformar(valor)) // Transforma o valor presente

.filter(valor -> verificar(valor)) // Filtra o valor, se presente

.flatMap(valor -> processar(valor)) // Processa o valor, se presente

.orElse(“Valor padrão em caso de ausência”); // Valor padrão se ausente

  • map: Aplica uma função ao valor presente do Optional, se existir, e retorna um novo Optional com o resultado da aplicação da função.

  • filter: Retorna um Optional vazio se o valor não atender a um determinado critério especificado pela função fornecida.

  • flatMap: Similar ao map, mas aceita uma função que retorna um Optional. Útil para evitar a aninhamento desnecessário de Optional.

  • orElse: Fornece um valor padrão se o Optional estiver vazio.

Essa abordagem faz uso de Programação Funcional e permite criar pipelines de operações de forma legível e concisa, evitando a necessidade de verificações verbosas de nulos.


메타데이터
post_id
cfc74ec9b316
slug
eleve-seu-código-para-outro-patamar-com-optional-cfc74ec9b316
url
https://medium.com/@juniorsoaresmartins/eleve-seu-c%C3%B3digo-para-outro-patamar-com-optional-cfc74ec9b316
canonical_url
https://medium.com/@juniorsoaresmartins/eleve-seu-c%C3%B3digo-para-outro-patamar-com-optional-cfc74ec9b316
author_url
https://medium.com/@juniorsoaresmartins
status
ok
fetched_at
2026-06-23 17:05:31