DEV Community

Deborah Espíndola
Deborah Espíndola

Posted on

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

Top comments (0)