Se ainda não viu, veja a parte 1 aqui.
A mais nova versão da linguagem C#, a melhorada C# 6.0, foi lançada pela Microsoft juntamente com a versão preview do Visual Studio 2015. Nessa versão foram adicionados novos recursos, todos destinados a tornar o código mais limpo e mais claro. Nós iremos abordar aqui os recursos Null-Conditional Operator e Expression-Bodied, que já podem ser utilizados em soluções que utilizam o Visual Studio 2015.
Null-Conditional Operator
Considere o seguinte trecho de código:
public static string Truncate(string value, int length)
{
string result = value;
if (value != null) // Desconsidere o caso de string vazia.
{
result = value.Substring(0, Math.Min(value.Length, length));
}
return result;
}
Se não é feita alguma validação, sobre a nulidade do parâmetro value, o método Truncate vai retornar o famoso NullReferenceException. O problema surge quando há a necessidade de se realizar validações dessa natureza, várias vezes, de acordo com o número de variáveis processadas. O que poderia implicar em uma quantidade considerável de código burocrático que não contribui em nada para a performance da aplicação. Com a C# 6.0, utilizando operador Null Conditional [?.], o código anterior pode ser reescrito sucintamente da seguinte forma:
public static string Truncate(string value, int length)
{
return value?.Substring(0, Math.Min(value.Length, length));
}
Uma aplicação particularmente útil do operador nulo condicional resolve uma peculiaridade do C # que existe desde C # 1.0: a validação de valor vazio antes de invocar um delegate. Considere o código C # 2.0 abaixo:
class Theremostat
{
event EventHandler OnTemperatureChanged;
private int _Temperature;
public int Temperature
{
get
{
return _Temperature;
}
set
{
EventHandler localOnChanged =
OnTemperatureChanged;
if (localOnChanged != null)
{
_Temperature = value;
localOnChanged(this, value);
}
}
}
}
Todo o “set” da propriedade Temperature se resume se utilizado o operador Null-Conditional, ao código abaixo:
_Temperature = value;
OnTemperatureChanged?.Invoke(this, value);
Expression-Bodied Functions And Properties:
Expression-Bodied é outro exemplo de recurso para simplificação de sintaxe já nativo na versão C# 6.0. Basicamente com esse recurso é possível agora utilizar expressões lambda para declarações de conteúdo de blocos, que podem ser funções, propriedades, etc. Por exemplo, sem utilizar o recurso Expression-Bodied, a declaração da função Move poderia ser feita da seguinte forma:
public Point Move(int dx, int dy)
{
return new Point(x + dx, y + dy);
}
Utilizando o recurso de Expression-Bodied é possível redefinir o código da seguinte forma:
public Point Move(int dx, int dy) => new Point(x + dx, y + dy);
É também possível utilizar esse recurso para a declaração de propriedades read-only, de forma sucinta, conforme o código abaixo:
public class Count
{
public int Number { get; set; }
public int NextNumber => this.Number + 1;
}
Conclusão
A utilização da maioria dos recursos implementados nessa nova versão da C#, pode tornar a leitura do código implementado mais simples, com menos linhas de código, e, portanto, pode tornar menos penosa a atividade de manutenção do sistema, principalmente tratando-se de projetos grandes.
Referências: