Palestra Novidades da linguagem C# 6

17
Microsoft / web ® Novidades C# 6 Renato Haddad MS Regional Director, MVP, MCTS, MCPD [email protected] @rehaddad www.renatohaddad.com http://weblogs.asp.net/ renatohaddad

Transcript of Palestra Novidades da linguagem C# 6

Page 1: Palestra Novidades da linguagem C# 6

Microsoft /web

®

Novidades

C# 6Renato HaddadMS Regional Director, MVP, MCTS, [email protected] @rehaddadwww.renatohaddad.comhttp://weblogs.asp.net/renatohaddad

Page 2: Palestra Novidades da linguagem C# 6

Agenda

inicialização de propriedades auto-properties

remover o Using de classes estáticas

inicializar dicionários

propagação de nulo

expression-bodied (variável com expressão)

interpolação de string, formatação,

uso de nameof no operador

await no catch/finally, filtros de exceção

Page 3: Palestra Novidades da linguagem C# 6

Inicialização de propriedadesclass produto { public int ID { get; set; } public string Nome { get; set; } public decimal Preco { get; set; } public double Qtde { get; set; }}

class produto { public int ID { get; set; } public string Nome { get; set; } = "Produto novo"; public decimal Preco { get; set; } = 8.99M; public double Qtde{ get; set; } = 10; public bool Ativo { get; } = true;}

Page 4: Palestra Novidades da linguagem C# 6

Inicialização de propriedades (constructor)class categoria { public int ID { get; set; } public string NomeCategoria { get; set; } public bool Ativa { get; }

public categoria() { Ativa = true; }}

class categoria { public int ID { get; set; } public string NomeCategoria { get; set; } public bool Ativa { get; } = true;}

Page 5: Palestra Novidades da linguagem C# 6

Remover o Using de classes estáticasusing static System.Console;using static System.Math;

var anonimo = new {esporte = "kitesurf"};// 1 - uso normal//Console.WriteLine(anonimo.esporte);//Console.ReadLine();// 2 - remover usingWriteLine(anonimo.esporte);var valor = 98.4563M;WriteLine(Round(valor));WriteLine(Abs(valor));WriteLine(Sqrt(64));

ReadLine();

Page 6: Palestra Novidades da linguagem C# 6

Inicializar dicionáriosvar cidades = new Dictionary<string, string> { ["SC"] = "Santa Catarina", ["SP"] = "São Paulo", ["RS"] = "Rio Grande do Sul"};WriteLine(cidades["SC"]);foreach (var item in cidades){ WriteLine($"{item.Key} - {item.Value}");

}

Page 7: Palestra Novidades da linguagem C# 6

Inicializar dicionáriosvar paises = new Dictionary<int, string> { [1] = "Brasil", [2] = "Australia", [3] = "Nova Zelandia"};

new Dictionary<int, produto> { [1] = new produto { nome = "mouse", preco = 25}, [2] = new produto { nome = "ultrabook", preco = 2500}, [5] = new produto { nome = "impressora", preco = 500 }}.ToList().ForEach(p =>WriteLine($"índice: {p.Key} - {p.Value.nome} | preço: {p.Value.preco}"));

Page 8: Palestra Novidades da linguagem C# 6

Propagação de nulo

class Medico { public int ID { get; set; } public string Nome { get; set; } public List<Paciente> Paciente { get; set; }}

class Paciente { public int ID { get; set; } public string NomePaciente { get; set; } public string Historico { get; set; } = "nada relatado"; public string Remedios { get; set; } public decimal ValorConsulta { get; set; }}

Page 9: Palestra Novidades da linguagem C# 6

Propagação de nulo (?)WriteLine($"Dr(a) {objM.Nome} tem {(objM.Paciente != null ? objM.Paciente.Count() : 0)} pacientes");// substituir por

WriteLine($"Dr(a) {objM.Nome} tem {objM.Paciente?.Count ?? 0} pacientes");

decimal? receita = 0;if (objM.Paciente != null) { receita = objM.Paciente.Sum(v => v.ValorConsulta);}// substituir por

decimal? receita = objM.Paciente?.Sum(v => v.ValorConsulta);WriteLine(receita);

Page 10: Palestra Novidades da linguagem C# 6

Expression-bodied (variável c/ expressão)public static decimal CalculaPreco(

decimal preco, int qtde) => preco * qtde;

WriteLine($"Valor do produto no estoque {CalculaPreco(10, 15)}");

Page 11: Palestra Novidades da linguagem C# 6

Expression-bodied (variável c/ expressão)var c = new carro {ID = 1, Modelo = "JEEP", AnoFabricacao = 2007, KmRodados = 800, Litros = 42 };WriteLine($"O carro {c.Modelo}, fabricado em {c.AnoFabricacao} está com {c.Idade()} anos. Rodando {c.KmRodados} km com {c.Litros} litros, a média é de {c.Consumo():n2} km/litro.");

class carro { public int ID { get; set; } public string Modelo { get; set; } public int Litros { get; set; } public double KmRodados { get; set; } public int AnoFabricacao { get; set; } public double Consumo() => KmRodados / Litros; public string Idade() => (DateTime.Today.Year - AnoFabricacao).ToString();}

Page 12: Palestra Novidades da linguagem C# 6

Expression-bodied (variável c/ expressão)var c = new carro {ID = 1, Modelo = "JEEP", AnoFabricacao = 2007, KmRodados = 800, Litros = 42 };WriteLine(c.ToString());

class carro { public int ID { get; set; } … public override string ToString() => $"{ID} : {Modelo}";}

Page 13: Palestra Novidades da linguagem C# 6

Interpolação de string, formataçãostring empresa = "Microsoft";WriteLine($"Empresa = {empresa}, email enviado às {DateTime.Now:hh}");WriteLine($"Empresa = {empresa.ToUpper()}, by {DateTime.Today:dd/MM/yyyy}");

WriteLine($"email enviado às {DateTime.Now:hh:mm} - {DateTime.Today:dddd}");

WriteLine($"índice: {p.Key} - {p.Value.Nome} | preço: {p.Value.Preco}"));WriteLine($"Valor do produto no estoque {CalculaPreco(10, 15)}");WriteLine($"{c.Modelo} está com {c.Idade()} anos.");WriteLine($"Média de {c.Consumo():n2} km/litro.");WriteLine($"Média é de {(c?.ConsumoString() ?? "-----")} km/litro.");WriteLine(c.ToString());

Page 14: Palestra Novidades da linguagem C# 6

Uso de nameof no operadorstring produto = "peixe";DateTime lancto = new DateTime(2012, 5, 15);

WriteLine($"o {produto} tem {Idade(lancto.Year)} anos");WriteLine($"o {produto} tem {(Idade(2020))} anos");

public static int Idade(int parametroAno) { if (parametroAno > DateTime.Today.Year) { //throw new Exception($"ano invalido {parametroAno}"); throw new Exception($"ano invalido {nameof(parametroAno)}"); } return DateTime.Today.Year - parametroAno;}

Page 15: Palestra Novidades da linguagem C# 6

await no catch/finally, filtros de exceçãovar servico = new HttpClient();try { // código async await processamento await servico.DeleteAsync("http://servico.com");}catch (Exception ex) { //await código trata erro //await Log(ex.Message);}finally { //await código //await servico.Close(); await servico.CancelPendingRequests();}

Page 16: Palestra Novidades da linguagem C# 6

Filtros no Exceptiontry { // algum código throw new Exception("tratar erro");}catch (Exception ex) when (ex.GetType() == typeof(SqlException)) { Console.WriteLine("erro customizado do SQL");}catch (Exception ex) when (ex.Message.Equals("tratar erro", StringComparison.CurrentCultureIgnoreCase)) { Console.WriteLine("erro customizado da mensagem");}catch (Exception ex) when (ex is SecurityException || ex is IOException) { Console.WriteLine("erro de segurança ou IO");}catch (Exception) { Console.WriteLine("erro genérico");}

Page 17: Palestra Novidades da linguagem C# 6

© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to

be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.