Neste artigo vamos fazer uma prévia de alguns recursos que estão previstos para a versão 9.0 da linguagem C#. |
Se você quiser se manter atualizado sobre como anda a implementação de novas funcionalidades para a linguagem basta acompanhar as listas de discussões.
Então o que irei mostrar a seguir esta baseado nestas listas lembrando que até o lançamento oficial da versão as coisas podem ser alteradas.
Vejamos agora os novos recursos esperados (previsão):
1. Código de validação de parâmetro NULL
simplificado
A versão simplificada prega que : decorando o valor de um parâmetro para um
método com uma pequena anotação, simplificamos a lógica interna, não
necessitando de cláusulas de validação, reduzindo assim o código de
validação padrão.
// Antes
void Insert(string s) {
if (s is null) {
throw new ArgumentNullException(nameof(s));
}
...
}
// proposta
void Insert(string s!) {
...
}
|
2. Expressão switch como uma expressão de
instrução
Este recurso ainda está na fase de discussão, mas a idéia geral é permitir
uma expressão switch como uma declaração de
expressão. Por exemplo:
//proposta private void M (bool c, ref int x, ref string s) { c switch {true => x = 1, false => s = null}; } ou
private void M (bool c, ref int x, ref string s) => c switch {true => x = 1, false => s = null};
|
3. Construtores Primários
Neste recurso o objetivo é simplificar todos os construtores,
campos, getters/setters de propriedades, etc.,
com os quais estamos acostumados. Por exemplo:
// Atualmente:
class Pessoa
{
private string _nome;
public Pessoa(string nome)
{
_nome = nome;
}
public string Nome
{
get => _nome;
set {
if (value == null) {
throw new NullArgumentException(nameof(Nome));
}
_nome = value;
}
}
}
//Proposta:
class Pessoa(string nome)
{
public string Nome
{
get => nome;
set {
if (value == null){
throw new NullArgumentException(nameof(Nome));
}
nome = value;
}
}
}
|
4. Record (Registro)
O objetivo da proposta para este recurso é remover a necessidade de escrever
todo o código padrão quando criamos uma nova
classe/estrutura.
//Partindo deste código
public class Pessoa
{
public string Nome { get; }
public DateTime Nascimento { get; }
public Pessoa(string Nome, DateTime Nascimento)
{
this.Nome = Nome;
this.Nascimento = Nascimento;
}
}
//para algo assim(proposta):
public class Pessoa(string Nome, DateTime Nascimento);
|
5. Uniões Discriminadas / classe enum
Neste recurso a proposta é usar palavras-chave
com as quais estamos acostumados, combiná-las e adicioná-las as do
Record
(mencionado acima). Seria uma forma mais
'limpa' de criar classes base abstratas e tipos concretos que herdam delas.
Exemplo:
// De algo como iso:
public partial abstract class Shape { }
public class Rectangle : Shape {
public float Width { get; }
public float Length { get; }
public Rectangle(float Width, float Length){
this.Width = Width;
this.Length = Length;
}
}
public class Circle : Shape {
public float Radius { get; }
public Circle(float Radius)
{
this.Radius = Radius;
}
}
// Para algo como isto(proposta):
enum class Shape
{
Rectangle(float Width, float Length);
Circle(float Radius);
}
|
Estes cinco recursos, que ainda são propostas, são apenas um aperitivo diante de todo o conteúdo previsto para a versão 9.0 do C#.
Você pode
acompanhar a discução no
GitHub, e pode participar dando opiniões e fazendo contribuições
com algo que seja importante.
E estamos
conversados...
"Eu sou o Alfa e o Ômega, o princípio e o fim,
diz o Senhor, que é, e que era, e que há de vir, o Todo-Poderoso."
Apocalipse 1:8
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Usando Listas com elegância - Macoratti
C# - Trabalhando com Coleções Genéricas do tipo List(<T>)
C# - Diferentes maneira de criar uma lista de objetos - Macoratti
C# - Acessando dados de um dicionário ordenado - Macoratti
C# - Usando um Dicionário para armazenar e ... - Macoratti
C# - Escolhendo a coleção correta para sua ... - Macoratti