Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

31
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7 Rogério Moraes de Carvalho Consultor e instrutor de TI rogeriom.wordpress.com | @ rogeriomc

Transcript of Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Page 1: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Rogério Moraes de CarvalhoConsultor e instrutor de TI

rogeriom.wordpress.com | @rogeriomc

Page 2: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Agenda

Plataforma de compiladores .NET & Visual Studio 2015

Plataforma de compiladores .NET (“Roslyn”)

Evolução do projeto “Roslyn”

Linha de produtos comerciais do Visual Studio 2015

Linha de produtos gratuitos do Visual Studio 2015

Visual Studio Online e Visual Studio Code

Visual Studio 2015 RTM

Page 3: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Agenda

Novidades da linguagem de programação C# 6

Construtores primários (C# 7)

Avanços em propriedades automáticas

Atribuição de propriedades automáticas somente com get no construtor

using estático

await em blocos catch e finally

Filtros de exceção

Operadores nulos-condicionais

Expressões nameof

Page 4: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Agenda

Novidades da linguagem de programação C# 6

Expressões de declaração (C# 7)

Expressões de corpo em membros de função

Iniciadores de índice

Literais binários e separadores de dígitos (C# 7)

Interpolação de strings

Ferramentas e documentação

Recursos adicionais

Page 5: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Plataforma de compiladores .NET &Visual Studio 2015

Page 6: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Plataforma de compiladores .NET (“Roslyn”)Plataforma de compiladores .NET & Visual Studio 2015

Projeto “Roslyn”?Nova implementação dos compiladores C# e Visual Basic

Feita em C# e Visual Basic

Com APIs públicas ricas

Open source no GitHub

https://github.com/dotnet/roslyn

Plataforma de compiladores .NET

Page 7: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Evolução do projeto “Roslyn”Plataforma de compiladores .NET & Visual Studio 2015

Início do projeto “Roslyn”, internamente

na Microsoftjun

2009

Liberação do primeiro “Roslyn”

Community Technology Preview (CTP)

19 out

2011

“Roslyn” June 2012 CTP

(suporte ao VS 2010 SP1 e ao VS 2012 RC)

05jun

2012

“Roslyn” September 2012 CTP

(suporte somente ao VS 2012 RTM)

17set

2012

No Keynote do dia 2 do Build 2014, o

código-fonte do “Roslyn” foi aberto:

roslyn.codeplex.com

03abr

2014

Visual Studio "14" CTP 1

(posteriormente: CTP 2, CTP 3, CTP 4)

03jun

2014

Visual Studio 2015 CTP 5

(posteriormente: CTP 6)

16jan

2015

Visual Studio 2015 RC29abr

2015

Visual Studio 2015 RTM20jul

2015

Page 8: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Linha de produtos comerciais do Visual Studio 2015Plataforma de compiladores .NET & Visual Studio 2015

Visual Studio Professional 2013 with MSDN

Visual Studio Premium 2013 with MSDN

Visual Studio Ultimate 2013 with MSDN

Visual Studio Professional 2015 with MSDN

Visual Studio Enterprise 2015 with MSDN

Visual Studio Test Professional 2013 Visual Studio Test Professional 2015

Visual Studio Team Foundation Server 2013 Visual Studio Team Foundation Server 2015 RC 2

Page 9: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Linha de produtos gratuitos do Visual Studio 2015Plataforma de compiladores .NET & Visual Studio 2015

Visual Studio Community 2013

Visual Studio Express for Desktop 2013

Visual Studio Community 2015

Visual Studio Express for Desktop 2015

Visual Studio Express for Web 2013 Visual Studio Express for Web 2015

Visual Studio Express for Windows 2015NovoEm

breve

Visual Studio Team Foundation Server Express

2013

Visual Studio Team Foundation Server Express

2015

Page 10: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Visual Studio Online e Visual Studio CodePlataforma de compiladores .NET & Visual Studio 2015

Visual Studio Online (www.visualstudio.com)

Conjunto de serviços na nuvem para times de desenvolvimento de software

Para qualquer linguagem e tudo em um pacote único

Java, Python, HTML5, JavaScript, C#, ...

Complemento para ambientes integrados de desenvolvimento

Visual Studio, Eclipse, Xcode, ...

Grátis para times de 5 usuários, com repositórios privados ilimitados

Visual Studio Code (code.visualstudio.com)

Editor gratuito da Microsoft para desenvolvimento de aplicações para web/nuvem

Disponível para Linux, Mac OS X e Windows (atualmente na versão 0.5.0)

Page 11: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Visual Studio 2015 RTMPlataforma de compiladores .NET & Visual Studio 2015

Linguagens de programação

C#

Visual Basic

Visual C++

F#

JavaScript

TypeScript

Desenvolvimento para Windows 10

Visual Studio Tools for Universal

Windows App Development

Desenvolvimento móvel

Visual C++ for Cross-Platform Mobile

Development

Visual Studio Tools for Apache Cordova

Visual Studio Emulator for Android

Xamarin (terceiros: Xamarin Inc.)

Frameworks

.NET Framework 4.6

Entity Framework

ASP.NET

Page 12: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Visual Studio 2015 RTMPlataforma de compiladores .NET & Visual Studio 2015

Codificação com qualidade

Visual Studio IDE

Depuração e diagnósticos

IntelliTest

Application Insights

Release Management

Git Version Control

CodeLens

Arquitetura, projeto e modelagem

Produtividade em interfaces XAML

Blend

XAML Language Service

Gerenciamento de pacotes

NuGet

Correções de bugs

Diversos outros recursos

Page 13: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Visual Studio 2015 RTMPlataforma de compiladores .NET & Visual Studio 2015

Extensões

Azure SDK 2.7 for .NET

Python Tools for Visual Studio 2.2 (RTM)

Visual Studio Tools for Unity 2.0 (RTM)

Node.js Tools for Visual Studio 1.1 (RC)

Office Developer Tools for Visual Studio 2015

GitHub Extension for Visual Studio 2015 (RTM)

Cloud-based Load Testing

Page 14: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Novidades da linguagem de programação C# 6e o futuro C# 7

Page 15: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Construtores primários (C# 7)Novidades da linguagem de programação C# 6 e o futuro C# 7

Parâmetros em classes e estruturas

Classes e estruturas com parâmetros definem construtores primários

Construtores primários simplificam a codificação

public class Trilha{

private readonly int _id;private readonly string _nome;

public Trilha(int id, string nome) {_id = id;_nome = nome;

}

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

public class Trilha(int id, string nome){

private readonly int _id = id;private readonly string _nome = nome;

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

C# 7

Page 16: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Construtores primários (C# 7)Novidades da linguagem de programação C# 6 e o futuro C# 7

Corpos de construtores primários

Muitos construtores inicializam campos e propriedades automáticas

Pode haver a necessidade de fazer outras coisas, como validar argumentos

public class Trilha{

private readonly int _id;private readonly string _nome;

public Trilha(int id, string nome) {if (nome == null)

throw new ArgumentNullException("nome");_id = id;_nome = nome;

}

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

public class Trilha(int id, string nome){

{if (nome == null)

throw new ArgumentNullException("nome");}

private readonly int _id = id;private readonly string _nome = nome;

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

C# 7

Page 17: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Construtores primários (C# 7)Novidades da linguagem de programação C# 6 e o futuro C# 7

Construtores explícitos

Tipos com construtores primários podem definir outros construtores

Os outros construtores devem chamar o primário, de forma direta ou indireta

public class Trilha{

private readonly int _id;private readonly string _nome;

public Trilha(int id, string nome) {if (nome == null)

throw new ArgumentNullException("nome");_id = id;_nome = nome;

}

public Trilha(string nome) : this(0, nome) { }

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

public class Trilha(int id, string nome){

{if (nome == null)

throw new ArgumentNullException("nome");}

private readonly int _id = id;private readonly string _nome = nome;

public Trilha(string nome) : this(0, nome) { }

public int Id { get { return _id; } }public string Nome { get { return _nome; } }

}

C# 7

Page 18: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Avanços em propriedades automáticasNovidades da linguagem de programação C# 6 e o futuro C# 7

Iniciadores em propriedades automáticas

Inicia o campo de apoio, ao invés de acessar o membro de função set

Similar a campos, não podem referenciar o this (objeto ainda não inicializado)

Ideais para serem usados junto com construtores primários

public class Palestra{

public Palestra(string titulo, DateTime inicio) {_titulo = titulo;_inicio = inicio;

}

private string _titulo;public string Titulo {

get { return _titulo; } set { _titulo = value; }}private DateTime _inicio;public DateTime Inicio {

get { return _inicio; } set { _inicio = value; }}

}

public class Palestra(string titulo, DateTime inicio){

public string Titulo { get; set; } = titulo;public DateTime Inicio { get; set; } = inicio;

}

C# 7

Page 19: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Avanços em propriedades automáticasNovidades da linguagem de programação C# 6 e o futuro C# 7

Propriedades automáticas somente com get

Nova possibilidade de propriedade automática somente com get

Neste caso, o campo de apoio é declarado como readonly

public class Trilha{

public Trilha(int id, string nome) {_id = id;_nome = nome;

}

private readonly int _id;public int Id { get { return _id; } }

private readonly string _nome;public string Nome { get { return _nome; } }

}

public class Trilha(int id, string nome){

public int Id { get; } = id;public string Nome { get; } = nome;

}

C# 7

Page 20: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Avanços em propriedades automáticas Novidades da linguagem de programação C# 6 e o futuro C# 7

Propriedades automáticas podem ser iniciadas em construtores

Sejam as propriedades automáticas somente com get ou com get e set

public class Trilha{

public Trilha(int id, string nome) {_id = id;_nome = nome;

}

private readonly int _id;public int Id { get { return _id; } }

private readonly string _nome;public string Nome { get { return _nome; } }

}

public class Trilha{

public Trilha(int id, string nome) {Id = id;Nome = nome;

}

public int Id { get; }public string Nome { get; }

}

Page 21: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

using estático Novidades da linguagem de programação C# 6 e o futuro C# 7

Permite especificar uma classe estática numa cláusula using

Os membros estáticos acessíveis ficam disponíveis sem a qualificação da classe

using System;

public class HomeController : Controller{

public IActionResult Index(){

ViewBag.NumeroNucleos = Environment.ProcessorCount;...

}}

using System.Environment;

public class HomeController : Controller{

public IActionResult Index(){

ViewBag.NumeroNucleos = ProcessorCount;...

}}

Page 22: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

await em blocos catch e finallyNovidades da linguagem de programação C# 6 e o futuro C# 7

Em C# 5 não é possível usar await em blocos catch e finally

Limitação significativa devido a uma dificuldade de implementação

Em C# 6, apesar da complexa implementação interna, é possível

Exception excecao = null;

try {await repositorio.EstatisticasAsync(filtragem);

} catch (Exception ex) {excecao = ex;

}

if (excecao != null) {await Logger.EscreverLogAsync(excecao);

} else {await repositorio.LiberarRecursosAsync();

}

try {await repositorio.EstatisticasAsync(filtragem);

} catch (Exception ex) {await Logger.EscreverLogAsync(excecao);

} finally {await repositorio.LiberarRecursosAsync();

}

Page 23: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Filtros de exceçãoNovidades da linguagem de programação C# 6 e o futuro C# 7

Se o filtro for verdadeiro, então a captura é processada

Caso contrário, a exceção não é capturada

Recurso já disponível nas linguagens Visual Basic e F#

try {palestras = repositorio.ConsultarPalestras().ToList();

}catch (FormatException ex) if (ex.Message.StartsWith("The DateTime")) {

throw new RepositorioJsonException("Erro de formatação de data/horário na fonte de dados JSON.", ex);}

Page 24: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Operadores nulo-condicionaisNovidades da linguagem de programação C# 6 e o futuro C# 7

Operador nulo-condicional ?

Permite acessar membros e elementos quando o receptor não for nulo

Caso contrário, retorna nulo

int? totalTrilhas = trilhas?.Length; // null se trilhas for nullint totalTrilhas = trilhas?.Length ?? 0; // 0 se trilhas for null (combinado com o operador coalescente nulo)Trilha primeiraTrilha = trilhas?[0]; // null se trilhas for nullint? totalPalestrasPrimeiraTrilha = trilhas?[0].Palestras?.Count(); // encadeamento de operadores nulo-condicionais

Page 25: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Expressões nameofNovidades da linguagem de programação C# 6 e o futuro C# 7

Retorna uma string com o nome de algum elemento do programa

Eventualmente é necessário, como nos seguintes exemplos:

No lançamento de uma exceção ArgumentException ou ArgumentNullException

Na implementação da interface INotifyPropertyChanged

public class Trilha(int id, string nome){

{if (nome == null)

throw new ArgumentNullException("nome");}public int Id { get; } = id;public string Nome { get; } = nome;

}

public class Trilha(int id, string nome){

{if (nome == null)

throw new ArgumentNullException(nameof(nome));}public int Id { get; } = id;public string Nome { get; } = nome;

}

Page 26: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Expressões de corpo em membros de funçãoNovidades da linguagem de programação C# 6 e o futuro C# 7

Declaração de membros de função com expressões lambda

Mesma conveniência de expressões lambda com delegates

public class Trilha(int id, string nome){

public int Id { get; } = id;public string Nome { get; } = nome;

public override string ToString() { return Nome; }}

public class Trilha(int id, string nome){

public int Id { get; } = id;public string Nome { get; } = nome;

public override string ToString() => Nome;}

public class Palestra{

...public DateTime Inicio { get; set; }public DateTime Termino{

get { return Inicio.AddMinutes(50); }}

}

public class Palestra{

...public DateTime Inicio { get; set; }public DateTime Termino => Inicio.AddMinutes(50);

}

Page 27: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Expressões de declaração (C# 7)Novidades da linguagem de programação C# 6 e o futuro C# 7

Permite declarar variáveis locais no meio de uma expressão

A declaração pode estar com ou sem um iniciador

DateTime inicio;

if (DateTime.TryParse(sInicio, out inicio)) {termino = inicio.AddMinutes(50);

}

if (DateTime.TryParse(sInicio, out DateTime inicio)) {termino = inicio.AddMinutes(50);

}

TimeSpan tempoReal, tempoPlanejado;

if ((tempoReal = termino - inicio) >(tempoPlanejado = TimeSpan.FromMinutes(50)))

{TimeSpan tempoExcesso = tempoReal - tempoPlanejado;...

}

if ((TimeSpan tempoReal = termino - inicio) >(TimeSpan tempoPlanejado = TimeSpan.FromMinutes(50)))

{TimeSpan tempoExcesso = tempoReal - tempoPlanejado;...

}

C# 7

C# 7

Os escopos dos exemplos são diferentes

Page 28: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Iniciadores de índiceNovidades da linguagem de programação C# 6 e o futuro C# 7

Nova sintaxe de iniciadores de dicionários e objetos com indexadores

Notação mais elegante, com o índice entre colchetes

Dictionary<int, string> descricoesNiveisPalestras =new Dictionary<int, string> {

{100, "Conteúdo introdutório e de visão geral"},{200, "Conteúdo intermediário"},{300, "Conteúdo avançado"},{400, "Conteúdo para especialista"}

};

Dictionary<int, string> descricoesNiveisPalestras =new Dictionary<int, string> {

[100] = "Conteúdo introdutório e de visão geral",[200] = "Conteúdo intermediário",[300] = "Conteúdo avançado",[400] = "Conteúdo para especialista"

};

Page 29: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Literais binários e separadores de dígitos (C# 7)Novidades da linguagem de programação C# 6 e o futuro C# 7

Literais binários pelo acréscimo do prefixo 0b

Muito útil nas configurações de indicadores (flags) de estado

Separadores de dígitos com caractere de sublinhado: _

Facilita a visualização de números com muitos dígitos

Sejam estes números decimais, hexadecimais ou binários

[Flags] public enum TitulosPalestrante {MostValuableProfessional = 1,MicrosoftCertifiedSolutionDeveloper = 2,MicrosoftCertifiedTrainer = 4,MvpMcsdMct = 7

}

[Flags] public enum TitulosPalestrante {MostValuableProfessional = 0b000_001,MicrosoftCertifiedSolutionDeveloper = 0b000_010,MicrosoftCertifiedTrainer = 0b000_100,MvpMcsdMct = 0b000_111

}

C# 7

Page 30: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Interpolação de stringsNovidades da linguagem de programação C# 6 e o futuro C# 7

Açúcar sintático para uma chamada do método estático String.Format

string duracao =string.Format(

"{0:hh:mm} às {1:hh:mm}",palestra.Inicio,palestra.Termino

);

string duracao =$"{palestra.Inicio:hh:mm} às {palestra.Termino:hh:mm}";

Page 31: Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7

Recursos adicionaisFerramentas e documentação

Microsoft Virtual Academy

www.microsoftvirtualacademy.com

MSDN Channel 9

channel9.msdn.com

MSDN Library

msdn.microsoft.com/library

C# 6 Language Specification

Ainda não está disponível

Visual Studio 2015/Online/Code

www.visualstudio.com

.NET Compiler Platform ("Roslyn")

github.com/dotnet/roslyn

.NET Foundation

www.dotnetfoundation.org

GitHub – ASP.NET 5 Home

github.com/aspnet/home

The ASP.NET Site

www.asp.net