teched 2011 review - evolução da linguagem de programação c#

30

Upload: rogerio-moraes-de-carvalho

Post on 24-May-2015

707 views

Category:

Technology


1 download

DESCRIPTION

A evolução da linguagem C# Linguagem C# 1.0 – Sistema de tipos Linguagem C# 1.0 – Memória e instruções Linguagem C# 1.0 – Herança e membros de classe Linguagem C# 1.0 – Atributos e outros recursos Principais novidades da linguagem C# 2.0 – Generics e Iterators Principais novidades da linguagem C# 2.0 – Tipos parciais e anuláveis Principais novidades da linguagem C# 2.0 – Métodos anônimos e :: Principais novidades da linguagem C# 2.0 – Classes estáticas e mais Principais novidades da linguagem C# 3.0 – Principais inovações Principais novidades da linguagem C# 3.0 – LINQ Principais novidades da linguagem C# 4.0 – Parâmetros opcionais e nomeados Principais novidades da linguagem C# 4.0 – Interoperabilidade com COM Principais novidades da linguagem C# 4.0 – Objetos com tipagem dinâmica Principais novidades da linguagem C# 4.0 – Covariância e contravariância Principais novidades da linguagem C# 5 – Task-based Asynchronous Pattern (TAP) Principais novidades da linguagem C# 5 – Versão assíncrona via TAP Principais novidades da linguagem C# 5 – Funções assíncronas Principais novidades da linguagem C# 5 – Windows Runtime Principais novidades da linguagem C# 5 – async e await Demo – Explorando as novidades da linguagem C# 5 Projeto Roslyn – Compilador como um serviço Principais novidades do projeto Roslyn – Compiler-as-a-Service (CaaS) Principais novidades do projeto Roslyn – APIs para o CaaS Community Technology Preview – Microsoft “Roslyn” CTP A linguagem C# está em evolução constante – Resumo

TRANSCRIPT

Page 1: TechEd 2011 Review - Evolução da linguagem de programação C#
Page 2: TechEd 2011 Review - Evolução da linguagem de programação C#

Evolução da linguagem de programação C#

Rogério Moraes de Carvalho VITA Informática @rogeriomc rogeriomc.wordpress.com

Page 3: TechEd 2011 Review - Evolução da linguagem de programação C#

A evolução da linguagem C# Evolução

C# 1.0 (Fev 2002)

C# 2.0 (Nov 2005)

C# 3.0 (Nov 2007)

Código gerenciado, linguagem POO,

suporte nativo a propriedades e

eventos, exceções, delegates, ...

Generics, Iterators, tipos parciais,

tipos anuláveis, classes estáticas,

métodos anônimos, ...

Language Integrated Query (LINQ),

expressões Lambda, métodos de

extensão, tipos anônimos, ...

C# 4 (Mar 2010)

Objetos tipados dinamicamente,

parâmetros opcionais e nomeados,

covariância e contravariância, …

C# 5 (2012)

Windows Runtime,

programação assíncrona, ...

C# 6? (?)

Projeto Roslyn

Page 4: TechEd 2011 Review - Evolução da linguagem de programação C#

Sistema de tipos Linguagem C# 1.0

Suporte a duas categorias de tipos Tipos por valor

Estruturas (incluindo os tipos simples)

Enumerações

Tipos por referência Arrays

Classes

Interfaces

Delegates

Sistema unificado de tipos object é base de todos tipos

Boxing e Unboxing

Page 5: TechEd 2011 Review - Evolução da linguagem de programação C#

Memória e instruções Linguagem C# 1.0

Gerenciamento automático de memória

Coletor de lixo (Garbage Collector)

Instruções inspiradas em C/C++ e Java

Blocos, rótulos, variáveis e expressões

Laços: while, do...while, for e foreach

Exceções: try...catch...finally, throw

Condicionais: if e switch

checked e unchecked

using

Page 6: TechEd 2011 Review - Evolução da linguagem de programação C#

Herança e membros de classe Linguagem C# 1.0

Suporte a herança simples

Membros possíveis em classes Constantes

Campos

Métodos

Propriedades

Eventos

Operadores

Indexadores

Construtores

Destrutores

Page 7: TechEd 2011 Review - Evolução da linguagem de programação C#

Atributos e outros recursos Linguagem C# 1.0

Atributos Elementos que permitem fazer anotações de forma declarativa

Namespaces e assemblies

Versionamento Resolve o problema conhecido como DLL Hell do modelo COM

Page 8: TechEd 2011 Review - Evolução da linguagem de programação C#

Generics e Iterators Principais novidades da linguagem C# 2.0

Generics

Os tipos genéricos permitem um alto nível de reutilização de código

Permite a definição de tipos parametrizáveis

Desempenho melhorado em classes de coleções

Iterators

Torna simples a definição de como um laço foreach vai interagir com o conteúdo de uma coleção

Page 9: TechEd 2011 Review - Evolução da linguagem de programação C#

Tipos parciais e anuláveis Principais novidades da linguagem C# 2.0

Tipos parciais

As definições de classes, estruturas ou interfaces podem ser divididas em múltiplos arquivos

O Visual Studio utiliza esta característica para separar o código gerado do código do usuário

Tipos anuláveis

Permite a uma variável de tipo por valor ter um valor indefinido

Úteis ao se trabalhar com bancos de dados ou outras estruturas

Page 10: TechEd 2011 Review - Evolução da linguagem de programação C#

Métodos anônimos e :: Principais novidades da linguagem C# 2.0

Métodos anônimos

Tornam possível a passagem de um bloco de código como um parâmetro

Em qualquer lugar em que um delegate é esperado

Qualificador de apelidos de namespace

O novo operador (::) fornece maior controle no acesso de membros de um namespace

Habilidade de acessar um membro no namespace global

Page 11: TechEd 2011 Review - Evolução da linguagem de programação C#

Classes estáticas e mais Principais novidades da linguagem C# 2.0

Classes estáticas

Modo seguro e conveniente de declarar uma classe que contém somente membros estáticos e não deve ser instanciada

Antes era necessário definir construtores de instância privados para não permitir que a mesma fosse instanciada

Permite definir diferentes níveis de acesso nos métodos de leitura e escrita de uma propriedade

Page 12: TechEd 2011 Review - Evolução da linguagem de programação C#

Principais inovações Principais novidades da linguagem C# 3.0

var mulheres = from c in contatos where c.Sexo == Sexo.Feminino select new { c.Nome, c.Email };

var mulheres = contatos .Where(c => c.Sexo == Sexo.Feminino) .Select(c => new {c.Nome, c.Email});

Métodos de extensão

Expressões lambda

Expressões de consulta

Iniciadores de objetos

Tipos anônimos

Árvores de expressão

Propriedades automáticas

Métodos parciais

Tipos implícitos em variáveis

locais

Iniciadores de coleções

Page 13: TechEd 2011 Review - Evolução da linguagem de programação C#

LINQ Principais novidades da linguagem C# 3.0

Objetos

<agenda> <contato> <nome>. . . </nome> <email> . . . </email> <fone/> . . . </fone> <contato/> . . . </agenda>

XML

.NET LINQ (Language INtegrated Query)

C# 3.0 VB 9.0 Outras linguagens…

Bancos de dados relacionais

LINQ to Objects

LINQ to SQL

LINQ to XML

LINQ to Entities

LINQ to DataSets

Page 14: TechEd 2011 Review - Evolução da linguagem de programação C#

Parâmetros opcionais e nomeados Principais novidades da linguagem C# 4

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding); public StreamReader OpenTextFile( string path, Encoding encoding); public StreamReader OpenTextFile( string path);

Método primário

Sobrecargas secundárias

Chamadas ao método primário com valores

padrão

Page 15: TechEd 2011 Review - Evolução da linguagem de programação C#

Parâmetros opcionais e nomeados Principais novidades da linguagem C# 4

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);

public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = true, int bufferSize = 1024);

Parâmetros opcionais

OpenTextFile("foo.txt", Encoding.UTF8);

OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);

Argumentos nomeados

OpenTextFile( bufferSize: 4096, path: "foo.txt", detectEncoding: false);

Argumentos nomeados precisam

ser os últimos

Argumentos não opcionais devem ser

especificados

Argumentos avaliados na ordem

da escrita

Argumentos nomeados podem

aparecer em qualquer ordem

Page 16: TechEd 2011 Review - Evolução da linguagem de programação C#

Interoperabilidade com COM Principais novidades da linguagem C# 4

Parâmetros nomeados e opcionais

Modificador ref opcional

object nomeArquivo = "Teste.docx"; object missing = System.Reflection.Missing.Value; doc.SaveAs(ref nomeArquivo, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

doc.SaveAs("Teste.docx");

Page 17: TechEd 2011 Review - Evolução da linguagem de programação C#

Objetos com tipagem dinâmica Principais novidades da linguagem C# 4

object calc = ObterCalculadora(); Type tipoCalc = calc.GetType(); object res = tipoCalc.InvokeMember("Adicionar", BindingFlags.InvokeMethod, null, new object[] { 10, 20 }); int soma = Convert.ToInt32(res);

ScriptObject calc = ObterCalculadora(); object res = calc.Invoke("Adicionar", 10, 20); int soma = Convert.ToInt32(res);

dynamic calc = ObterCalculadora(); int sum = calc.Add(10, 20);

Tipado estaticamente para ser dinâmico

Invocação dinâmica do método

Coversão dinâmica

Calculadora calc = ObterCalculadora(); int soma = calc.Adicionar(10, 20);

Page 18: TechEd 2011 Review - Evolução da linguagem de programação C#

Covariância e contravariância Principais novidades da linguagem C# 4

public interface IEnumerable<T> { IEnumerator<T> GetEnumerator(); }

public interface IEnumerator<T> { T Current { get; } bool MoveNext(); }

public interface IEnumerable<out T> { IEnumerator<T> GetEnumerator(); }

public interface IEnumerator<out T> { T Current { get; } bool MoveNext(); }

out = covariância somente posições de

saída

IEnumerable<string> strings = ObterStrings(); IEnumerable<object> objects = strings;

Pode ser tratada como menos específica

public interface IComparer<T> { int Compare(T x, T y); }

public interface IComparer<in T> { int Compare(T x, T y); }

IComparer<object> objComp = ObterComparer(); IComparer<string> strComp = objComp;

in = contravariância somente posições de

entrada

Pode ser tratada como mais específica

Page 19: TechEd 2011 Review - Evolução da linguagem de programação C#

TAP Principais novidades da linguagem C# 5

Task-based Asynchronous Pattern

Novo padrão de programação assíncrona no .NET Framework

Baseado nos tipos Task e Task<TResult> do namespace System.Threading.Tasks

Implementado por um único método NomeOperacaoAsync

Deve retornar Task ou Task<TResult>, baseado no tipo de retorno void ou TResult, respectivamente, do método síncrono correspondente (NomeOperacao)

Se a classe já tiver um método NomeOperacaoAsync, então deve-se usar NomeOperacaoTaskAsync

Page 20: TechEd 2011 Review - Evolução da linguagem de programação C#

Versão assíncrona via TAP Principais novidades da linguagem C# 5

TRetorno NomeOperacao(TParam1 p1, TParam2 p2);

Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2);

Versão síncrona de uma operação

Versão assíncrona da operação síncrona segundo o padrão TAP

Opcionais: cancelamento e progresso Task<TRetorno> NomeOperacaoAsync(TParam1 p1, TParam2 p2 [, CancellationToken cancellationToken] [, IProgress<T> progress]);

Cancelamento

Progresso

Page 21: TechEd 2011 Review - Evolução da linguagem de programação C#

Funções assíncronas Principais novidades da linguagem C# 5

Tipos de retorno das funções assíncronas

Deve ser void, Task ou Task<TResult>

Avaliação de funções assíncronas Inicialmente idêntica a uma função síncrona

Quando atinge uma expressão await, a função assíncrona deve retornar imediatamente ao seu chamador

Se a função assíncrona não for void, um objeto Task ou Task<TResult> será retornado para o chamador

Page 22: TechEd 2011 Review - Evolução da linguagem de programação C#

Windows Runtime Principais novidades da linguagem C# 5

Windows Runtime

Nova biblioteca da próxima versão do Windows projetada para ser usada com JavaScript, C#, Visual Basic e C++

Modelo de programação assíncrona

Interface IAsyncOperation<T>

O compilador automaticamente transforma código normal em uma máquina de estado de callback

Page 23: TechEd 2011 Review - Evolução da linguagem de programação C#

async e await Principais novidades da linguagem C# 5

O suporte a funções assíncronas será incorporado à linguagem C# 5

Novas palavras-chaves: async e await

A palavra-chave await é usada para marcar chamadas assíncronas

Dispensa a criação de funções de callback

A palavra-chave async deve estar na assinatura de funções que fazem chamadas assíncronas

await somente pode ser usada na chamada de funções com async na assinatura

Page 24: TechEd 2011 Review - Evolução da linguagem de programação C#

async e await Principais novidades da linguagem C# 5

async Task<decimal> calcularVendasAsync(string arquivo) { using (TextReader leitor = new StreamReader(arquivo)) { string linha = null; decimal total = 0M; while ((linha = await leitor.ReadLineAsync()) != null) { string[] campos = linha.Split(';'); total += decimal.Parse(campos[campos.Length - 1]); } return total; } }

Page 25: TechEd 2011 Review - Evolução da linguagem de programação C#

Explorando as novidades da linguagem C# 5

Rogério Moraes de Carvalho VITA Informática

Page 26: TechEd 2011 Review - Evolução da linguagem de programação C#

Projeto Roslyn Compilador como um serviço

Tradicionalmente, compiladores são caixas pretas

O projeto Roslyn muda este modelo

Abertura dos compiladores Visual Basic e C# como APIs

Modelos de objetos da linguagem para: Geração e análise de código

Refatoração

Suporte para scripting e interatividade com Visual Basic e C#

Page 27: TechEd 2011 Review - Evolução da linguagem de programação C#

Compiler-as-a-Service (CaaS) Principais novidades do projeto Roslyn

Classe

Campo

public Classe1

private

string

campo1

Código-fonte Código-fonte

Código-fonte

Assembly .NET

Assembly .NET

Assembly .NET

Meta-programação Laço

Ler-Avaliar-Imprimir

Modelo de objetos da linguagem

Incorporação de DSL (Domain

Specific Language)

Compilador

Page 28: TechEd 2011 Review - Evolução da linguagem de programação C#

APIs para o CaaS Principais novidades do projeto Roslyn

Serviços

da

linguagem

APIs do

compilador

Pipeline do

compilador Syntax

Tree API

Symbol

API

Binding and

Flow Analysis

APIs

Emit

API

Form

atter

Co

lorize

r

Ou

tlinin

g

Navigate To

Ob

ject B

row

ser

Co

mp

letion

List

Find

All

Refe

ren

ces

Re

nam

e

Qu

ick Info

Signatu

re H

elp

Extract Meth

od

Go

To D

efinitio

n

Edit an

d C

on

tinu

e

Parser Metadata

Import

Binder IL

Emitter

Symbols

Page 29: TechEd 2011 Review - Evolução da linguagem de programação C#

Microsoft “Roslyn” CTP Community Technology Preview

Microsoft “Roslyn” October 2011 CTP

Liberado no dia 19 de outubro de 2011

Para ser instalado no Visual Studio 2010 SP1

Somente um subconjunto das linguagens Visual Basic e C# foram implementadas neste primeiro CTP

Microsoft “Roslyn” no site da Microsoft

http://msdn.microsoft.com/roslyn

Page 30: TechEd 2011 Review - Evolução da linguagem de programação C#

Resumo A linguagem C# está em evolução constante

A evolução da linguagem C# C# 1.0 em fevereiro de 2002 (.NF 1.0)

C# 2.0 em novembro de 2005 (.NF 2.0)

C# 3.0 em novembro de 2007 (.NF 3.5)

C# 4 em abril de 2010 (.NF 4)

C# 5 em 2012 (.NF 4.5) Suporte ao Windows Runtime

Facilidade na programação assíncrona

Projeto Roslyn Compiler-as-a-Service (CaaS)

Microsoft “Roslyn” October 2011 CTP (19/10/2011)