A história do null

Marcio Frayze
3 min readAug 23, 2019

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

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.

--

--