• Nenhum resultado encontrado

Microsoft TechDays Lisboa

N/A
N/A
Protected

Academic year: 2021

Share "Microsoft TechDays Lisboa"

Copied!
13
0
0

Texto

(1)

DEV011

C# 3.0 Futuras Direcções e

Inovações na Linguagem

Luis Falcão

[email protected]

Professor,Instituto Superior de Engenharia de Lisboa(ISEL)

Patrocinadores

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

(2)

O Projecto LINQ

Objectos <book> <title/> <author/> <year/> <price/> </book> XML

.NET Language Integrated Query

C# 3.0 VB 9.0 Others… Relacional LINQ to Objects LINQ to SQL LINQ to XML LINQ to Entities LINQ to DataSets

Linq para objectos

Luis Falcão

Professor

A Reter da Demo

(3)

Evolução da linguagem C#

C# 1.0

C# 2.0

C# 3.0

Managed Code

Generics

Language Integrated Query

C# 3.0 e Linq

Fundações

– C# 2.0

Genéricos

public class Stack<T>: IEnumerable<T> { T[] items;

int count;

public void Push(T data) {...} public T Pop() {...}

public IEnumerator<T> GetEnumerator() { for (int i = count – 1; i >= 0; --i) {

yield return items[i]; }

} int? x = 123; int? y = null; if (x == null) { . . . }

class Stack<T> { . . . }

Stack<int> stack = new Stack<int>();

Iteradores

Tipos Nullable

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Standard Query Operators

C# 3.0 – Objectivos de

desenho

Integração de objectos, dados relacionais

XML e outros

Aumentar a concisão da linguagem

Adicionar construções funcionais

Não ficar comprometido com APIs

específicas

(4)

Inovações no C# 3.0

var contacts =

from c in customers

where c.City == “Lisboa"

select new { c.Name, c.City };

var contacts =

customers

.Where(c => c.City == “Lisboa")

.Select(c => new { c.Name, c.City });

Métodos de extensão Expressões Lambda Expressões de query Iniciadores de Objectos Tipos anónimos Inferência do tipo das variáveis locais Expression trees Propriedades automáticas Partial methods

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Inferência do tipo de

variáveis locais

int i = 5; string s = "Hello"; double d = 1.0;

int[] numbers = new int[] {1, 2, 3};

Dictionary<int,Order> orders = new Dictionary<int,Order>();

var i = 5; var s = "Hello"; var d = 1.0;

var numbers = new int[] {1, 2, 3}; var orders = new Dictionary<int,Order>();

“var” significa que a variável assume o tipo da

expressão que a iniciou

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

(5)

Métodos de extensão

namespace MyStuff {

public static class Extensions {

public static string Concatenate(this IEnumerable<string> strings,

string separator) {…} }

}

using MyStuff;

string[] names = new string[] { “Sport", “Lisboa", “Benfica" }; string s = names.Concatenate(", ");

Extension method

Trazer extensões

para scope obj.Foo(x, y)

XXX.Foo(obj, x, y)

IntelliSense!

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

public delegate bool Predicate<T>(T obj);

public class List<T> {

public List<T> FindAll(Predicate<T> test) { List<T> result = new List<T>(); foreach (T item in this)

if (test(item)) result.Add(item); return result;

}

Expressões Lambda

List<Customer> customers = GetCustomerList(); List<Customer> x = customers.FindAll(

delegate(Customer c) { return c.City == "Lisboa"; } );

List<Customer> x = customers.FindAll(c => c.City == "Lisboa");

Tipo explícito Statement context Tipo implícito Expression context

Expressões Lambda

public delegate T Func<T>(); public delegate T Func<A0, T>(A0 arg0); public delegate T Func<A0, A1, T>(A0 arg0, A1 arg1);

Func<Customer, bool> test = c => c.City == "Lisboa";

Func<int, int, int> f = (x, y) => x * y;

Func<int, int, int> comparer = (int x, int y) => { if (x > y) return 1; if (x < y) return -1; return 0; }; double factor = 2.0;

(6)

Expressões Lambda e

Métodos de Extensão

Luis Falcão

Professor

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Iniciadores de Objectos

public class Point {

private int x, y;

public int X { get { return x; } set { x = value; } }

public int Y { get { return y; } set { y = value; } }

}

Point a = new Point { X = 0, Y = 1 };

Point a = new Point(); a.X = 0; a.Y = 1; Afectação de campos ou propriedades

Iniciadores de Objectos

public class Rectangle {

private Point p1 = new Point(); private Point p2 = new Point();

public Point P1 { get { return p1; } } public Point P2 { get { return p2; } } }

Rectangle r = new Rectangle { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } };

(7)

Iniciadores de colecções

List<int> numbers = new List<int> { 1, 10, 100 };

Tem que implementar IEnumerable

List<int> numbers = new List<int>(); numbers.Add(1);

numbers.Add(10); numbers.Add(100);

Tem que ter um método público

Add()

Dictionary<int, string> spellings = new Dictionary<int, string> { { 0, "Zero" }, { 1, "One" }, { 2, "Two" }, { 3, "Three" } };

O método Add() pode ter mais q um parâmetro

Iniciadores de colecções

public class Contact {

private string name;

private List<string> phoneNumbers = new List<string>();

public string Name { get { return name; } set { name = value; } } public List<string> PhoneNumbers { get { return phoneNumbers;

} } }

List<Contact> contacts = new List<Contact> { new Contact {

Name = "Chris Smith",

PhoneNumbers = { "206-555-0101", "425-882-8080" } },

new Contact { Name = "Bob Harris",

PhoneNumbers = { "650-555-0199" } }

};

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Tipos Anónimos

public class Customer {

public string Name; public Address Address; public string Phone; public List<Order> Orders;

}

public class Contact {

public string Nm; public string Tel; }

Customer c = GetCustomer(…);

Contact x = new Contact { Nm = c.Name, Tel = c.Phone };

Customer c = GetCustomer(…); var x = new { c.Name, c.Phone };

Customer c = GetCustomer(…); var x =new { Nm = c.Name, Tel = c.Phone };

class ??? {

public string Nm; public string Tel; }

(8)

var contacts = from c in customers where c.City == "Lisboa" select new { c.Name, c.Phone };

Tipos Anónimos

var contacts = customers.

.Where(c => c.City == "Lisboa") .Select(c => new { c.Name, c.Phone });

class ??? {

public string Name; public string Phone; }

IEnumerable<???>

foreach (var c in contacts) { Console.WriteLine(c.Name); Console.WriteLine(c.Phone); } ???

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Expression Trees

Code as data

Predicate<Customer> test = c => c.State == "WA";

Predicate<Customer> test = new Predicate<Customer>(XXX); private static bool XXX(Customer c) {

return c.State == "WA"; }

public delegate bool Predicate<T>(T item);

Expression Trees

Code as data

Expression<Predicate<Customer>> test = c => c.City == “Lisboa"; public delegate bool Predicate<T>(T item);

(9)

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Propriedades Automáticas

public class Product {

public string Name; public decimal Price; }

public class Product {

string name; decimal price; public string Name {

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

public decimal Price { get { return price; } set { price = value; } }

}

public class Product {

public string Name { get; set; } public decimal Price { get; set; } }

private string □; public string Name {

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

Tem que terget e set

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

Propriedades Automáticas

Expressões de Query

Standard Query Operators

Expressões de Query

Sintaxe de queries integrada na

linguagem

from

id in source

{

from

id

in

source |

where

condition }

[

orderby

ordering, ordering,

… ]

select

expr |

group

expr

by

key

[

into

id query ]

Começa com

(10)

from c in customers

where c.City == "Lisboa"

select new { c.Name, c.Phone };

customers

.Where(c => c.City == "Lisboa")

.Select(c => new { c.Name, c.Phone });

Expressões de Query

Exemplo

Os queries são transformados em execuções a

métodos

Where, Select, SelectMany, OrderBy, GroupBy

Inovações no C# 3.0

Resumo

Inferência do tipo de variáveis

Métodos de Extensão

Expressões Lambda

Iniciadores de Objectos &

Colecções

Tipos anónimos

Expression trees

Prop. automáticas

Expressões de query

var x = 5;

static void Dump(this object o);

c => c.Name new Point { x = 1, y = 2 } new List<int> { 1, 10, 100 };

new { c.Name, c.Phone }

from … where … select Expression<T>

class Product

{ public string Name { get; set; } }

Inovações no C# 3.0

var contacts =

from c in customers

where c.City == “Lisboa"

select new { c.Name, c.City };

var contacts =

customers

.Where(c => c.City == “Lisboa")

.Select(c => new { c.Name, c.City });

Métodos de extensão Expressões Lambda Expressões de query Iniciadores de Objectos Tipos anónimos Inferência do tipo das variáveis locais Expression trees Propriedades automáticas Partial methods

Agenda

O projecto Linq

Extensões ao C# 3.0 para suporte ao Linq

Inferência do tipo de variáveis locais

Métodos de extensão

Expressões Lambda

Iniciadores de Objectos e de Colecções

Tipos Anónimos

Expression Trees

(11)

O Projecto LINQ

Objectos <book> <title/> <author/> <year/> <price/> </book> XML

.NET Language Integrated Query

C# 3.0 VB 9.0 Others… Relacional LINQ to SQL LINQ to XML LINQ to Entities LINQ to DataSets LINQ to Objects

Standard Query Operators

Restriction Where Projection Select, SelectMany Ordering OrderBy, ThenBy Grouping GroupBy Quantifiers Any, All

Partitioning Take, Skip, TakeWhile, SkipWhile Sets Distinct, Union, Intersect, Except Elements First, FirstOrDefault, ElementAt Aggregation Count, Sum, Min, Max, Average Conversion ToArray, ToList, ToDictionary Casting OfType<T>

Standard Query

Operaqtors

Luis Falcão

Professor

Projecto Linq - Resumo

Language Integrated Query for .NET

Sintaxe nativa para queries em C# 3.0 and VB 9.0

Linq para objectos - Standard Query Operators

Queries SQL-like para qualquer colecção .NET

IEnumerable<T>

Linq to SQL

Framework Linq para acesso a dados relacionais

Linq to XML

Framework Linq para acesso a dados XML

Linq to DataSets

(12)

Onde nos leva o Linq?

Framework unificada de queries para

objectos, dados relacionais e XML

Compile type checking e IntelliSense nos

queries

Queries em C# e VB com expressividade

e “poder semelhante” ao SQL e XPath

Modelo extensível para linguagens / APIs

Recursos Úteis

Projecto Linq Website

http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

C#3.0 – Future Versions

http://msdn2.microsoft.com/en-us/vcsharp/aa336745.aspx

Microsoft Visual Studio Code Name “Orcas”

Language-Integrated Query, May 2006

http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&displaylang=en

Contactos Pessoais

Email: [email protected] Blog: http://www.cc.isel.ipl.pt/CS/blogs/lfalcao/default.aspx

CCISEL

Site:http://www.cc.isel.ipl.pt/

Formações .NET:

http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&displaylang=en

Participe Noutras Sessões

DEV027 : LINQ - .NET Language

Integrated Query (LINQ) Framework

Quinta, 22 Fev, 13:30, Sala: A8

DEV015 : Introdução ao Windows

Communication Foundation [António Cruz]

Quinta, 22 Fev, 15:15, Sala: A6

DEV025 - Segurança na Windows

Communication Foundation [Pedro Félix]

Quinta, 22 Fev, 17:00, Sala: A2

ATE/Pergunte aos

Especialistas

Obtenha Respostas às Suas Questões

(13)

Outros Recursos

Para Profissionais de TI

TechNet Plus

2 incidentes de suporte gratuito profissional software exclusivo: Capacity Planner software Microsoft para avaliação actualizações de segurança e service packs acesso privilegiado à knowledge base formação gratuita e muito mais.

www.microsoft.com/portugal/technet/subscricoes

Questionário de Avaliação

Passatempo!

Complete o questionário de

avaliação e devolva-o no balcão

da recepção.

Habilite-se a ganhar uma Xbox

360 por dia!

DEV011

C# 3.0 Futuras Direcções e Inovações na Linguagem

© 2007 Microsoft Corporation. All rights reserved.

Referências

Documentos relacionados

Diversidade sexual na escola: currículo e prática pedagógica / Alexandre Bortolini ; orientadora: Vera Maria Candau.. Candau,

• Linhas gerais de revestimento de sala limpa • Projetos de máquinas modulares para fácil limpeza • Tecnologia CIP (Cleaning In Place).. • Máquinas projetadas de

Este Departamento curricular adota a designação de Departamento de Expressões. Os candidatos que reúnam condições são apresentados pelo Diretor de Agrupamento. O Coordenador

Premda je najpopularnije mišljenje da je Don Kihot djelo satirično – satira na ondašnje viteštvo, parodija viteških romana – ta knjiga ne može se uvrstiti ni u koju

OBJETO: Prestação de Serviços para atender necessidade temporária de excepcional interesse público, inerente às atribuições de Gestor de Relações Institucionais - Gestor

Neste trabalho, foi desenvolvido um algoritmo para coordenar os robˆ os de forma eficiente em um cen´ ario onde os robˆ os possuem um alvo em comum.. Palavras-chave— Exames de robˆ

Não é possível o upgrade do Windows Server &#34;Longhorn&#34; para o Server Core. Server Core – Configuração

Eis, por exemplo, um método para produzir uma lista com um dado nú- mero de elementos, onde cada elemento é produzido mediante uma chamada ao método get (de um objecto do