Se você já tem alguma experiência com desenvolvimento de softwares, já deve ter enfrentado algum tipo de problema relacionado com uma referência nula. Seja um Null Pointer Exception no Java, o clássico segmentation fault da linguagem C ou algum erro equivalente em outra linguagem. Mas você sabe qual a origem do null?

Esta pergunta pode até parecer um pouco sem sentido, já que que muita gente nem imagina que seria possível programar sem este recurso, mas a primeira pessoa a incluir o conceito de uma referência nula em uma linguagem de programação foi Sir Tony Hoare, em 1965.

Foto de Tony Hoare, criador a referência nula
Sir Charles Antony Richard Hoare

O objetivo de Sir Tony Hoare era certificar que toda referência fosse totalmente segura e isso seria feito através de uma verificação automática realizada pelo próprio compilador, mas em um determinado momento ele não resistiu a tentação de adicionar a possibilidade de atribuir uma referência nula, pelo simples fato que era muito fácil de implementar.

Mal sabia ele que isso iria causar vários problemas de vulnerabilidade, instabilidade e muito prejuízo ao longo das décadas seguintes. A ideia deu tão errada que em uma conferência em 2009 ele pediu desculpas e chamou esta invenção de “meu erro de um bilhão de dólares”!

Mas preciso também destacar que Sir Tony Hoare é um cientista da computação brilhante. Foi criador da linguagem ALGOL 60 (precursora da linguagem C, Pascal, Simula, entre outras), recebeu o prêmio Turing de 1980, criou o algoritmo quicksort, além de diversas outras contribuições importantes para computação. O que nos mostra que até mesmo pessoas geniais podem cometer erros!

Por que continuamos usando null?

Se a ideia de uma referência nula é tão ruim que até seu criador já pediu desculpas, por que continuamos usando este conceito? Talvez a melhor resposta seja por questões culturais. Nos acostumamos a trabalhar desta forma e muita gente ainda subestima o potencial de problemas que isso pode causar. Outro fator é a retrocompatibilidade. Seria muito difícil eliminar a referência nula do Java por exemplo, já que isso iria impossibilitar a compatibilidade com uma quantidade imensa de código legado já produzido nas últimas décadas.

Algumas linguagens como scala, kotlin, F# e swift evitam e desincentivam o uso do null, embora ainda esteja presente. Mas existem também linguagens que já eliminaram este problema, removendo o conceito de referência nula.

Uma folha de papel em branco cercada de flores bonitas
Uma folha de papel em branco cercada de flores bonitas

Um exemplo é Elm, uma linguagem para desenvolvimento de front-ends web lançada em 2012. Mas Haskell, uma linguagem funcional pura para uso geral, já havia feito a mesma coisa quase 30 anos atrás. Ao invés de referências nulas, elas optaram por utilizar o conceito de Maybe que, resumidamente, é uma tipo de dado que encapsula dois possíveis estados: pode estar vazio ou pode conter um referência para um outro tipo. Pretendo elaborar um pouco mais sobre este conceito e dissertar sobre suas vantagens em um outro artigo.

Então, atualmente podemos dividir as linguagens em três categorias: aquelas onde existe o conceito de nulo e ele é amplamente disseminado e aceito, aquelas onde existe o conceito mas a comunidade aconselha que ele seja utilizado apenas em pontos muito específicos do código e uma terceira categoria de linguagens onde a pessoa desenvolvedora é incapaz de expressar a ideia de referência nula, já que a linguagem não possui este conceito.

Obrigado por ler até aqui! Se gostou deste texto, tenho mais alguns publicados em minha página do medium e também mantenho um podcast onde falo sobre livros que impactaram na minha carreira.

Entusiasta de programação extrema e autor do projeto segunda.tech.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store