DEV Community

Deborah Espíndola
Deborah Espíndola

Posted on

2

Null Object Pattern

A keyword null é o que usamos para indicar ausência de valor. O inventor no valor nulo, introduzido no ALGOL, foi Tony Hoare. Hoare se desculpou por ter inventado o valor null em 2009, chamando esse feito de “meu erro um bilhão de dólares”, uma vez que é causado uma confusão quando uma variável declarada como tendo o tipo string, por exemplo, pode também não ser uma string, mas null. Em muitas linguagens, como é o caso do Typescript, se uma variável puder carregar o valor null (ou undefined, que possui a mesma ideia para o intuito desse texto), é obrigatório que o programador declare isso. Nesses casos, podemos dizer que a variável é nullable.

O motivo para null ter o potencial de ser programático é que isso cria mais uma alternativa nos programas, onde algo acontecerá dependendo se a variável for nula ou não. Um exemplo disso, é para o caso de que eu precise utilizar métodos de um tipo. Utilizando JavaScript como exemplo, supondo uma string com o valor ‘Hello, world’ salva na variável “message”, o output para message.substring(0, 5) deve ser a string ‘Hello’. A partir do momento que é possível que “message” seja nula, caso não tratada a possibilidade, isso pode acarretar num erro de execução do projeto, uma vez que “substring” é um método de string, que o valor nulo não possui.

De forma sintetizada, se algo pode ser null, é necessário checar se o valor é nulo ou não.

Apesar do exemplo anterior demonstrar o aumento de complexidade do desenvolvimento de uma aplicação devido a possibilidade do valor nulo, é importante ressaltar a sua importância e por que ele é usado. A principal vantagem do uso do Padrão Null Object é a possibilidade de considerar diferentes componentes como iguais, de tratá-los da mesma forma. Um exemplo é uma árvore binária, que apesar de existir uma diferença entre os nós comuns e as chamadas folhas (nós sem filhos), podemos tratá-los da mesma forma na hora de construir uma função que retorne todos os nós. Um exemplo disso é utilizando uma função recursiva, onde caso o nó não possua filhos, simplesmente ele não precisa retornar nada, e essa diferenciação é feita utilizando o valor null. Outro exemplo seria com polimorfismo, onde a super entidade veículo pode possuir o método "ligar", mas que usando o valor nulo não precisamos possuí-lo quando criarmos uma sub entidade bicicleta.

Imagem de uma árvore binária


Este artigo escrito durante a disciplina IF977 - Engenharia de Software pelos alunos de graduação em Sistemas de Informação pela Universidade Federal de Pernambuco: Deborah Espíndola, Gustavo Henrique Lima, José Edson, Kevin Beltrão e Liliane Carla

Image of Datadog

Master Mobile Monitoring for iOS Apps

Monitor your app’s health with real-time insights into crash-free rates, start times, and more. Optimize performance and prevent user churn by addressing critical issues like app hangs, and ANRs. Learn how to keep your iOS app running smoothly across all devices by downloading this eBook.

Get The eBook

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay