A nova e melhorada C#: Conheça a C# 6.0 – Parte 2

Por dti digital|
Atualizado: Jun 2021 |
Publicado: Set 2015

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:

http://www.c-sharpcorner.com/UploadFile/20c06b/see-whats-new-in-C-Sharp-6-and-visual-studio-2015/
https://msdn.microsoft.com/en-us/magazine/dn802602.aspx
http://www.mikesdotnetting.com/article/271/7-c-6-0-features-that-every-asp-net-developer-should-know-about
https://msdn.microsoft.com/en-us/magazine/Dn879355.aspx
Por: Davi Lucas Gomes
Revisão: Jéssica Saliba

Quer saber mais?