Há quase um ano e meio, o time de projeto da linguagem de programação C# na Microsoft está planejando, debatendo, experimentando e testando as ideias dos próximos recursos a serem incorporados na próxima versão da linguagem. A palestra tem como objetivo explorar o que esperar de um futuro próximo da linguagem. A expectativa é que a nova versão da linguagem C# seja lançada juntamente com a próxima versão do Visual Studio, de codinome Visual Studio “15”. Muito provavelmente, o Visual Studio 2017 (ou, quem sabe, Visual Studio 2016) será lançado em novembro de 2016.
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
O futuro da linguagem de programação C# (C# 7)
1. O futuro da linguagem de programação C#
(C# 7)
Rogério Moraes de Carvalho
VITA Informática
rogeriom.wordpress.com | @rogeriomc
2. Agenda
O futuro da linguagem de programação C# (C# 7)
Visual Studio “15” Preview 2
Literais binários
Separadores de dígitos
Tuplas
Referências locais
Funções locais
Correspondência de padrão
Informações adicionais
3. Visual Studio “15” Preview 2
O Preview 2 foi liberado em 10 de maio de 2016
www.visualstudio.com/downloads/visual-studio-next-downloads-vs (Download)
www.visualstudio.com/en-us/news/releasenotes/vs15-relnotes (Notas da versão)
Ativação de características experimentais do compilador C#
Demo 1: Acréscimo de símbolos de compilação condicional: __DEMO__ e __DEMO_EXPERIMENTAL__
4. Literais binários
Representação de literais numéricos na base binária (2)
Sintaxe: 0bbn...b3b2b1 ou 0Bbn...b3b2b1, com b1, b2, b3, ..., bn {0, 1} e n 1
[Flags]
public enum Assuntos {
AspNetCore = 0b00000001, // 1
DotNetCore = 0b00000010, // 2
EntityFrameworkCore = 0b00000100, // 4
FrameworksCore = 0b00000111, // 7
Conteiner = 0b00001000, // 8
IoT = 0b00010000, // 16
Azure = 0b00100000 // 32
}
Demo 2: Uso de literais binários numa enumeração com o atributo Flags
5. Separadores de dígitos
Separação de dígitos em literais com o caractere _
Exemplos: 0b0100_0111, 1_928_345, 0xF0_A8_D4_1A
[Flags]
public enum Assuntos {
AspNetCore = 0b0000_0001, // 1
DotNetCore = 0b0000_0010, // 2
EntityFrameworkCore = 0b0000_0100, // 4
FrameworksCore = 0b0000_0111, // 7
Conteiner = 0b0000_1000, // 8
IoT = 0b0001_0000, // 16
Azure = 0b0010_0000 // 32
}
Demo 3: Uso de separadores de dígitos em literais binários numa enumeração com o atributo Flags
6. Tuplas
Tipos tupla têm uma sintaxe similar a listas de parâmetros
A sintaxe (string trilha, int numeroPalestras) indica um tipo de
estrutura anônima com dois campos públicos: trilha do tipo string e
numeroPalestras do tipo int
public static IEnumerable<(string trilha, int numeroPalestras)>
PalestrasPorTrilha(this IEnumerable<Palestra> palestras) {
return from palestra in palestras
group palestra by palestra.Trilha into g
orderby g.Count() descending, g.Key
select (g.Key, g.Count());
}
Demo 4: Uso de tuplas no tipo de retorno de um método
7. Referências locais
Para permitir o uso de referências em variáveis locais
int a = 1;
ref int b = ref a;
Console.WriteLine($"a = {a}, b = {b}"); // a = 1, b = 1
a = 2;
Console.WriteLine($"a = {a}, b = {b}"); // a = 2, b = 2
Demo 5: Referências locais
8. Funções locais
Funções que são declaradas e utilizadas dentro de um membro de
função
static void Main(string[] args)
{
void imprimirPalestras(IEnumerable<Palestra> palestras)
{
foreach (var palestra in palestras) {
Console.WriteLine(palestra);
}
}
imprimirPalestras(obterPalestras());
}
Demo 6: Funções locais
9. Correspondência de padrão
Permite, por exemplo, o teste de um tipo e armazenamento do tipo
convertido numa variável
Palestra primeiraPalestra = obterPalestras().First();
if (primeiraPalestra is PalestraEmTrilha primeiraPalestraEmTrilha) {
Console.WriteLine(primeiraPalestraComTrilha.Trilha);
}
Demo 7: Correspondência de padrão
10. Informações adicionais
Language Feature Status (GitHub)
github.com/dotnet/roslyn/blob/future/docs/Language%20Feature%20Status.md
C# 7 Work List of Features (GitHub)
github.com/dotnet/roslyn/issues/2136
Build 2016 – The Future of C# (Channel 9)
channel9.msdn.com/Events/Build/2016/B889
C# 7 and Beyond with Mads Torgersen (InfoQ)
www.infoq.com/news/2016/06/csharp-mads-torgersen-qcon