o futuro da linguagem de programação c# (c# 7)
TRANSCRIPT
O futuro da linguagem de programação C# (C# 7)
Rogério Moraes de CarvalhoVITA Informática
rogeriom.wordpress.com | @rogeriomc
AgendaO 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
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__
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, // 1DotNetCore = 0b00000010, // 2EntityFrameworkCore = 0b00000100, // 4FrameworksCore = 0b00000111, // 7Conteiner = 0b00001000, // 8IoT = 0b00010000, // 16Azure = 0b00100000 // 32
}
Demo 2: Uso de literais binários numa enumeração com o atributo Flags
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, // 1DotNetCore = 0b0000_0010, // 2EntityFrameworkCore = 0b0000_0100, // 4FrameworksCore = 0b0000_0111, // 7Conteiner = 0b0000_1000, // 8IoT = 0b0001_0000, // 16Azure = 0b0010_0000 // 32
}
Demo 3: Uso de separadores de dígitos em literais binários numa enumeração com o atributo Flags
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 gorderby g.Count() descending, g.Keyselect (g.Key, g.Count());
}
Demo 4: Uso de tuplas no tipo de retorno de um método
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 = 1a = 2;Console.WriteLine($"a = {a}, b = {b}"); // a = 2, b = 2
Demo 5: Referências locais
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
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
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