O que vem de novo para o C#?
É tanta atualização de framework e linguagens que às vezes se torna meio complicado de acompanhar tudo. Então eu resolvi fazer um compilado de novidades (algumas nem tão novas) interessantes que estão vindo no C# para compartilhar com vocês.
Pattern Matching
Antes do pattern matching no C# quando tínhamos que utilizar algum valor ou método de uma classe filha onde recebíamos uma classe pai por parâmetro, primeiramente a gente verificava se o objeto era daquele tipo e depois fazíamos um cast para o mesmo.
O C# 7 trouxe uma otimização de escrita de código para isso. A grande sacada é que agora podemos dentro de um if, ou em um case de um switch, colocar uma variável para o tipo que queremos, e se passar na clausula do is ele automaticamente vai fazer o cast para o objeto.
Também podemos utilizar o is para verificação de nulos agora, o que deixa a leitura do código muito mais verbosa.
Throw Expression
Hoje existe a necessidade de validar certos objetos antes de realizar qualquer tipo de persistência de dados, com as throw expressions podemos adicionar exceções em expression-bodied members “=>”, null-coalescing expressions “??” e conditional expressions “?:”.
Notem que no segundo exemplo eu consegui logo validar a inexistência do carrinho logo após a consulta utilizando a null-coalescing expressions “??”, sem a necessidade de criar um if.
Local Functions
Agora também podemos ter métodos dentro de métodos no C#. Acho que isso pode ajudar a esconder certos métodos privados que eram criados apenas para atender a um único método.
Tuples
As tuplas servem para guardar um conjunto temporário de valores. No C# elas existem já tem um tempo, porém só agora na versão 7 elas se tornaram viáveis, elas foram reformuladas e tivemos uma melhoria que facilita a criação e leitura delas.
Agora podemos dar nome a cada um dos tipos que colocamos na Tupla, isso deixa a criação dela mais legível, e podemos utilizar esses nomes para acessar cada um dos valores após ela ser criada.
Deconstructors
Essa parte de dar nome aos tipos na tupla está diretamente ligado aos deconstructors que é outra feature que chegou com o C# 7, com ele podemos acessar as tuplas e objetos de diversos formas.
Quando utilizamos o “_” significa que não nos importamos com o valor que venha naquela posição da tupla. Para realizarmos desconstrução de objetos precisamos criar um método especifico nele chamado Deconstruct.
Com esse método criado na classe podemos acessar os valores da mesma forma que acessamos nas tuplas. Pode ser interessante quando não queremos carregar todos os dados do objeto na memória. Podemos também criar overloads do deconstructor para utilizarmos em situações especificas, isso faz com que não seja necessário colocarmos vários “_” só por que não precisamos de um valor que foi colocado no decostructor que outro método utiliza.
Non-Nullable References
O C# 8 que ainda não está disponível deve ter algumas features que vão mudar a forma como programamos hoje, uma das propostas apresentadas é a Non-Nullable References.
A ideia é fazer com que até tipos complexos não possam mais ser instanciados como null, fazendo com que NullReferencesExceptions sejam convertidas em erros de compilação.
Como podemos ver no exemplo, agora também precisaremos da nullable reference “?” para tipos complexos caso seja necessário dizer que aquela variável ou propriedade pode ser nula.
Link do github que detalha a proposta: https://gist.github.com/olmobrutall/31d2abafe0b21b017d56
Extensions
As Extensions também fazem parte das novas propostas, elas servirão para criarmos métodos de extensões de tipos como String, List, Dictionary sem que seja necessário criar aquela classe estática que tem um this no parâmetro do método para que o C# entenda que aquele método é uma extensão da classe.
A ideia ainda está bem crua, mas a comunidade está tentando fazer com que ela saia. Assisti a um vídeo do Program Manager da Microsoft dizendo que a feature pode vir para o C# 8, mas ainda não vi nenhuma movimentação na parte de propostas do C# 8 no Github para a mesma.
Link para o vídeo onde Mads Torgensen comenta de algumas features do C# 8, incluindo as extensions: https://channel9.msdn.com/Blogs/Seth-Juarez/A-Preview-of-C-8-with-Mads-Torgersen.