Eu tenho lido sobre a (des) conveniência de ter em null
vez de (por exemplo) Maybe
. Depois de ler este artigo , estou convencido de que seria muito melhor usarMaybe
(ou algo semelhante). No entanto, fico surpreso ao ver que todas as linguagens de programação imperativas ou orientadas a objetos "conhecidas" ainda usam null
(o que permite acesso não verificado a tipos que podem representar um valor "nada"), e isso Maybe
é usado principalmente em linguagens de programação funcionais.
Como exemplo, observe o seguinte código C #:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Algo cheira mal aqui ... Por que deveríamos verificar se o argumento é nulo? Não devemos assumir que toda variável contém uma referência a um objeto? Como você pode ver, o problema é que, por definição, quase todas as variáveis podem conter uma referência nula. E se pudéssemos decidir quais variáveis são "anuláveis" e quais não? Isso nos pouparia muito esforço ao depurar e procurar uma "NullReferenceException". Imagine que, por padrão, nenhum tipo possa conter uma referência nula . Em vez disso, você declararia explicitamente que uma variável pode conter uma referência nula , apenas se você realmente precisar dela. Essa é a ideia por trás do Talvez. Se você possui uma função que, em alguns casos, falha (por exemplo, divisão por zero), você pode retornar umMaybe<int>
, declarando explicitamente que o resultado pode ser um int, mas também nada! Esse é um dos motivos para preferir Talvez, em vez de nulo. Se você estiver interessado em mais exemplos, sugiro ler este artigo .
Os fatos são que, apesar das desvantagens de tornar a maioria dos tipos anuláveis por padrão, a maioria das linguagens de programação OO realmente o faz. É por isso que me pergunto:
- Que tipo de argumentos você teria que implementar
null
em sua linguagem de programação em vez deMaybe
? Existem razões ou é apenas "bagagem histórica"?
Certifique-se de entender a diferença entre nulo e Talvez antes de responder a esta pergunta.
null
ou o seu conceito não existem (IIRC Haskell é um exemplo).
null
s por um longo tempo. Não é fácil simplesmente largar isso.