São 3 da manhã e não me apetece dormir. Estive a ajudar um amigo meu a trabalhar no código dele e estou apenas parcialmente cansado. Bem, porque não continuar com a série sobre a evolução do C#? Vamos a isso!
Desta vez vamos falar de nullable types. Já todos utilizámos, mas no .NET 1.0 eles não existiam. Como é que representávamos um valor vazio? Uma string pode conter null, supostamente é essa a representação do valor vazio. Como é que representamos um valor numérico vazio? Verificamos se é maior que 0? Bem, nalguns casos é exactamente isso que fazemos. Ou isso, ou criamos um valor constante que representa um "não valor". Mas para mim isto não é expressivo suficiente.
Basicamente, um nullable type é apenas um non-nullable type envolvido na estrutura System.Nullable. Esta é uma estrutura genérica por isso faz uso dos Generics introduzidos no C# 2.0. A estrutura é bastante simples, contém apenas uma propriedade HasValue e Value. Ambas são muito explícitas e isto torna as coisas mais fáceis de trabalhar. Em relação à sintaxe, vejamos o seguinte:
As duas linhas acima têm o mesmo significado. Podemos atribuir null a ambas as variáveis e utilizar as mesmas propriedades. É apenas uma facilidade sintáctica!.
Na minha opinião, nullable types trazem os seguintes benefícios:
Desta vez vamos falar de nullable types. Já todos utilizámos, mas no .NET 1.0 eles não existiam. Como é que representávamos um valor vazio? Uma string pode conter null, supostamente é essa a representação do valor vazio. Como é que representamos um valor numérico vazio? Verificamos se é maior que 0? Bem, nalguns casos é exactamente isso que fazemos. Ou isso, ou criamos um valor constante que representa um "não valor". Mas para mim isto não é expressivo suficiente.
Basicamente, um nullable type é apenas um non-nullable type envolvido na estrutura System.Nullable. Esta é uma estrutura genérica por isso faz uso dos Generics introduzidos no C# 2.0. A estrutura é bastante simples, contém apenas uma propriedade HasValue e Value. Ambas são muito explícitas e isto torna as coisas mais fáceis de trabalhar. Em relação à sintaxe, vejamos o seguinte:
As duas linhas acima têm o mesmo significado. Podemos atribuir null a ambas as variáveis e utilizar as mesmas propriedades. É apenas uma facilidade sintáctica!.
Na minha opinião, nullable types trazem os seguintes benefícios:
- Acrescentam simplicidade ao lidar com bases de dados. Em T-SQL podemos ter um int, numeric e outros tipos nullable.
- Podem transmitir o significado de um parâmetro/variável mais facilmente. Se esse parâmetro for opcional, é mais fácil deixá-lo nullable (apesar de hoje em dia termos também parâmetros opcionais).
Não é possível ter reference types nullable (nem sequer faz sentido) nem nullable dentro de outro nullable (um nullable duplo?). Esta é uma feature muito pequena que passa despercebida para algumas pessoas que conheço e portanto pode ser menos utilizada do que merece.
Obrigado e até à próxima!
Disclaimer: Esta foi uma tradução literal do post em Inglês, por isso a informação não é actual.
Disclaimer: Esta foi uma tradução literal do post em Inglês, por isso a informação não é actual.
Comments
Post a Comment