Olá Pessoal, tudo bom?
O post de hoje é relacionado a uma nova classe criada no Java SE 8, java.util.Optional. Irei descrever algumas vantagens e um problema de código gerado pela utilização total e cega disso em qualquer lugar cabível. Veja na continuação desse post…
Classe java.util.Optional
A versão 8 do Java SE introduziu uma nova classe de nome Optional. Esta se encontra no package java.util.
A principal utilidade desta é indicar se um valor está presente ou ausente. A vantagem disso é que não é necessário mais verificações de null e principalmente NullPointerExceptions. Huuuuuuummmmm interessante hã? Isso ajuda a deixar o código mais limpo. Assim as principais vantagens seriam:
1 – Verificações de null não são necessárias
2 – Não existiriam mais NullPointerExceptions durante a execução
3 – Desenvolvimento de APIs mais limpas e puras
4 – Fim dos códigos clichês!
Abaixo um código de exemplo utilizado a classe Optional:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package br.com.mauda.novidade.java8.optional; import java.util.Optional; public class OptionalExemploBasico { public static void main(String[] args) { Optional<String> linguagem = Optional.of("JAVA"); String respostaPreenchida = "Sim"; String respostaNula = null; System.out.println("Optional Não Vazio:" + linguagem); System.out.println("Optional Não Vazio: Obtem o valor: " + linguagem.get()); System.out.println("Optional Vazio: " + Optional.empty()); System.out.println("Chamada do método ofNullable() em Optional Não Vazio: " + Optional.ofNullable(respostaPreenchida)); System.out.println("Chamada do método ofNullable() em Optional Vazio: " + Optional.ofNullable(respostaNula)); // Ocorre uma java.lang.NullPointerException na linha abaixo System.out.println("Chamada do método of() Optional Não Vazio: " + Optional.of(respostaNula)); } } |
A saída desse código será a seguinte:
1 2 3 4 5 6 7 8 9 10 |
Optional Não Vazio:Optional[JAVA] Optional Não Vazio: Obtem o valor: JAVA Optional Vazio: Optional.empty Chamada do método ofNullable() em Optional Não Vazio: Optional[Sim] Chamada do método ofNullable() em Optional Vazio: Optional.empty Exception in thread "main" java.lang.NullPointerException at java.util.Objects.requireNonNull(Objects.java:203) at java.util.Optional.<init>(Optional.java:96) at java.util.Optional.of(Optional.java:108) at br.com.mauda.novidade.java8.optional.OptionalExemploBasico.main(OptionalExemploBasico.java:19) |
Como pode ser verificado no console acima, não há NullPointerException nas chamadas do método ofNullable(). Já no caso do método of() irá ocorrer uma exception, pois esse método não é “null safe“.
Existem muito mais aprofundamentos dessa classe Optional, mas o objetivo desse post não é apresentar isso, mas sim o que pode ocorrer com o seu código ao utilizar essa abordagem ao extremo:
O uso do Optional em excesso
Observe o seguinte código abaixo que se encontra em uma classe qualquer:
1 2 3 4 5 6 7 |
public static boolean isPresente(Object objeto) { return Optional.ofNullable(objeto).isPresent(); } public static boolean isNotPresente(Object objeto) { return !isPresente(objeto); } |
É um código fácil de entender? A principio se você possui o conhecimento da classe Optional é facil. Nós temos um objeto e utilizamos o método ofNullable() e a partir desse verificamos se está “presente” no retorno da chamada desse método.
Grande parte das tarefas do nosso dia a dia é evitar códigos complexos, que muitas vezes atrapalhem uma leitura rápida do código. Infelizmente isso faz parte da nossa profissão de desenvolvedor. Quando é possível que os desenvolvedores façam algo simples, eles piram o cabeção e deixam algo muito mais complexo que o necessário.
Aquele código acima pode ser simplificado? PODE! Pode ser melhor legível? PODE! Então como ficaria o código acima mais simples? Observe:
1 2 3 4 5 6 7 |
public static boolean isPresente(Object objeto) { return objeto != null; } public static boolean isNotPresente(Object objeto) { return objeto == null; } |
E aí? Muito mais simples? Muito mais fácil sua leitura?
Então o que fica desse post hoje, muito mais que a utilização do Optional é
FAÇA O SEU CÓDIGO O MAIS SIMPLES E FUNCIONAL POSSÍVEL!!!
finally{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply