Nulo serve a um propósito muito válido de representar uma falta de valor.
Eu direi que sou a pessoa mais vocal que conheço sobre os abusos do nulo e todas as dores de cabeça e sofrimento que eles podem causar, especialmente quando usados generosamente.
Minha posição pessoal é que as pessoas podem usar nulos única quando eles podem justificar que é necessário e adequado.
Exemplo que justifica nulos:
Data da morte normalmente é um campo anulável. Existem três situações possíveis com a data da morte. A pessoa morreu e a data é conhecida, a pessoa morreu e a data é desconhecida ou a pessoa não está morta e, portanto, não existe uma data de morte.
Date of Death também é um campo DateTime e não possui um valor "desconhecido" ou "vazio". Ele tem a data padrão que aparece quando você cria um novo datetime que varia de acordo com o idioma utilizado, mas existe tecnicamente uma chance de que a pessoa de fato morra naquele momento e sinalize como seu "valor vazio" se você quiser use a data padrão.
Os dados precisariam representar a situação corretamente.
A pessoa com data de falecimento da morte é conhecida (9/3/1984)
Simples, '9/3/1984'
A pessoa está morta, a data da morte é desconhecida
Então, o que é melhor? Nulo , '0/0/0000' ou '01 / 01/1869 '(ou qualquer que seja o seu valor padrão?)
Pessoa não está morta data da morte não é aplicável
Então, o que é melhor? Nulo , '0/0/0000' ou '01 / 01/1869 '(ou qualquer que seja o seu valor padrão?)
Então, vamos pensar em cada valor ...
- Nulo , tem implicações e preocupações das quais você precisa ter cuidado, tentar manipulá-lo acidentalmente sem confirmar que não é nulo primeiro, por exemplo, lançaria uma exceção, mas também representa melhor a situação real ... Se a pessoa não estiver morta a data da morte não existe ... não é nada ... é nula ...
- 0/0/0000 , isso pode ser bom em alguns idiomas e pode até ser uma representação apropriada sem data. Infelizmente, alguns idiomas e validação rejeitarão isso como um data / hora inválido, o que o torna um impedimento em muitos casos.
- 1/1/1869 (ou qualquer que seja o valor padrão da data e hora) , o problema aqui é que é complicado lidar com isso. Você pode usar isso como valor de sua falta de valor, exceto o que acontece se eu quiser filtrar todos os meus registros pelos quais não tenho data de falecimento? Eu poderia filtrar facilmente as pessoas que realmente morreram nessa data, o que poderia causar problemas de integridade dos dados.
O fato é que às vezes você Não precisa representam nada e certeza às vezes um tipo de variável funciona bem para isso, mas muitas vezes os tipos de variáveis precisam ser capazes de representar nada.
Se não tenho maçãs, tenho 0 maçãs, mas e se não souber quantas maçãs tenho?
Por todos os meios, o nulo é abusado e potencialmente perigoso, mas às vezes é necessário. É apenas o padrão em muitos casos, porque até eu fornecer um valor a falta de um valor e algo precisa representá-lo. (Nulo)