Eu tenho lido sobre a (des) conveniência de ter em nullvez 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
nullem 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.
nullou o seu conceito não existem (IIRC Haskell é um exemplo).
nulls por um longo tempo. Não é fácil simplesmente largar isso.