Dando continuidade à série de artigos sobre novidades do C# 7, hoje conheceremos três novos recursos que melhoram a legibilidade e reduzem o número de linhas de código:
- Binary Literals;
- Digit Separators;
- Throw Expressions.
Curso C# (C Sharp) Básico
Conhecer o cursoBinary Literals
Este recurso seria adicionado no C# 6.0 mas, no final, foi decidido que só entraria na versão 7. Como o nome indica, ele permite declarar valores binários como literais.
Para fazer isso, basta utilizar o prefixo 0b:
byte var1 = 0b00011011;
byte var2 = 0b10101010;
ushort var3 = 0b111001011010000;
Console.WriteLine($"{var1:X}");
Console.WriteLine($"{var2:X}");
Console.WriteLine($"{var3:X}");
Ele torna mais simples trabalhar com valores binários no código. Mesmo não sendo algo muito comum, agora não é mais necessário trabalhar com as versões em decimais dos valores binários. O que melhora a legibilidade do código.
Digit Separators
Ainda no quesito de melhorar a legibilidade, agora na versão 7, o C# permite que se utilize o underline (_) como digito separador de um valor numérico literal.
No lugar de definir um valor assim:
int var1 = 1234567891011;
Ele pode ser definido da seguinte forma:
int var1 = 1_234_567_891_011;
Isso também pode ser aplicado a valores binários:
ushort var1 = 0b0001_1011_1100_0001;
Ou hexadecimais:
ulong l2 = 0xfedc_ba98_7654_3210;
E o digito separador tem importância apenas visual, portanto, ele pode ser definido de qualquer forma no valor que será interpretado da mesma forma pelo C#:
int var1 = 1_2345_6789_1011;
ushort var1 = 0b000_110_111_100_000_1;
ulong l2 = 0xfe_dc_ba_98_76_54_32_10;
Throw Expressions
Por fim, temos um recurso chamado throw expressions, que permite reduzir a quantidade de linhas do código.
Até a versão 6, quando era necessário gerar uma exceção a partir do valor de um retorno, era necessário realizar o procedimento abaixo:
public class Pessoa
{
private int _idade;
public int Idade
{
get
{
return _idade;
}
set
{
if (value > 0)
_idade = value;
else
throw new Exception("Idade inválida!");
}
}
}
Como a cláusula throw não podia ser utilizada em expressões que retornam valores, o seu uso em situações acima, estava atrelado a uma condicional. Mas, na versão 7.0, com o recurso throw expression, é possível lançar exceções a partir do código que define uma expressão. Assim, o mesmo código acima pode ser refeito para:
public class Pessoa
{
private int _idade;
public int Idade
{
get
{
return _idade;
}
set
{
_idade = value > 0 ? value : throw new Exception("Idade inválida!");
}
}
}
Teremos o mesmo resultado do código anterior.
Este recurso pode ser combinado com o recurso Expression-bodied Members, para gerar um resultado ainda mais enxuto:
public class Pessoa
{
private int _idade;
public int Idade
{
get => _idade;
set => _idade = value > 0 ? value : throw new Exception("Idade inválida!");
}
}
Conclusão
Apesar de serem recursos que modificam pequenos detalhes da linguagem, seus usos são recomendados pois melhoram a qualidade do código. Então, sempre que possível procure utilizá-los.