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
- 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
- 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
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Plataforma .NET, Visual Studio 2015, C# 6 e futuro C# 7
1. 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
2. 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
3. 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
4. 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
6. 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
7. Evolução do projeto “Roslyn”
Plataforma de compiladores .NET & Visual Studio 2015
Início do projeto “Roslyn”, internamente
na Microsoft
jun
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)
05
jun
2012
“Roslyn” September 2012 CTP
(suporte somente ao VS 2012 RTM)
17
set
2012
No Keynote do dia 2 do Build 2014, o
código-fonte do “Roslyn” foi aberto:
roslyn.codeplex.com
03
abr
2014
Visual Studio "14" CTP 1
(posteriormente: CTP 2, CTP 3, CTP 4)
03
jun
2014
Visual Studio 2015 CTP 5
(posteriormente: CTP 6)
16
jan
2015
Visual Studio 2015 RC
29
abr
2015
Visual Studio 2015 RTM
20
jul
2015
8. Linha de produtos comerciais do Visual Studio 2015
Plataforma 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
9. Linha de produtos gratuitos do Visual Studio 2015
Plataforma 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 2015Novo
Em
breve
Visual Studio Team Foundation Server Express
2013
Visual Studio Team Foundation Server Express
2015
10. Visual Studio Online e Visual Studio Code
Plataforma 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)
11. Visual Studio 2015 RTM
Plataforma 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
12. Visual Studio 2015 RTM
Plataforma 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
13. Visual Studio 2015 RTM
Plataforma 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
15. 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
16. 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
17. 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
18. Avanços em propriedades automáticas
Novidades 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
19. Avanços em propriedades automáticas
Novidades 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
20. 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; }
}
21. 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;
...
}
}
22. await em blocos catch e finally
Novidades 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();
}
23. Filtros de exceção
Novidades 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);
}
24. Operadores nulo-condicionais
Novidades 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 null
int totalTrilhas = trilhas?.Length ?? 0; // 0 se trilhas for null (combinado com o operador coalescente nulo)
Trilha primeiraTrilha = trilhas?[0]; // null se trilhas for null
int? totalPalestrasPrimeiraTrilha = trilhas?[0].Palestras?.Count(); // encadeamento de operadores nulo-condicionais
25. Expressões nameof
Novidades 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;
}
26. Expressões de corpo em membros de função
Novidades 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);
}
27. 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
28. Iniciadores de índice
Novidades 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"
};
29. 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
30. Interpolação de strings
Novidades 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}";
31. Recursos adicionais
Ferramentas 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