SFD - C# para a comunidade

1,262 views
1,189 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,262
On SlideShare
0
From Embeds
0
Number of Embeds
657
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

SFD - C# para a comunidade

  1. 1. C# para aComunidadePaulo Ortins
  2. 2. Quem é Paulo Ortins ?• Trabalho com software desde 2010• MTM Tecnologia• Comecei a me envolver com comunidade em 2011• Aprendiz de blogueiro (pauloortins.wordpress.com)• Aprendiz de promoter (#horaextra e Coding Dojos)• Twitter : @pauloortins• Email : paulo.ortins@gmail.com
  3. 3. Quem é o C# ?• Linguagem de programação criada pela MS no início dos anos 2000.• Atualmente na versão 5.0• Orientada a objetos, mas tem características de linguagem funcional.• Fortemente Tipada embora tenha suporte a variáveis dinâmicas
  4. 4. Como surgiu a idéia dessa palestra ? • Comunidade C# pouco atuante nos eventos • Comunidade, como um todo, não tinha muito interesse por C#
  5. 5. Ausência de projetos opensource
  6. 6. Frameworks de Testes• NUnit (http://www.nunit.org/ )• MbUnit (http://www.mbunit.com )• xUnit (http://xunit.codeplex.com/ )• SpecFlow (http://www.specflow.org )
  7. 7. Frameworks de Mock• Moq (http://code.google.com/p/moq/ )• Nsubstitute (http://nsubstitute.github.com/ )• FakeItEasy (https://github.com/fakeiteasy )
  8. 8. Frameworks de DI• Castle.Windsor (http://www.castleproject.org/projects/windsor/)• StructureMap (https://github.com/structuremap/structuremap)• Spring.NET (https://github.com/springsource/spring-net/)• Ninject (http://www.ninject.org)
  9. 9. Frameworks ORM• NHibernate (https://github.com/hibernate/hibernate-orm)• SubSonic (https://github.com/subsonic/SubSonic-3.0)
  10. 10. Frameworks Web• FubuMVC (https://github.com/DarthFubuMVC/fubumvc)• OpenRasta (http://openrasta.org/index.html)• Nancy (https://github.com/NancyFx/Nancy)
  11. 11. Não se pode usar C# no Linux ouno MacOS
  12. 12. Mono• É uma implementação open source do .NET Framework baseado nos padrões do ECMA para C# e para a CLR.• Permite rodar o .NET em ambiente Linux, Microsoft Windows, Mac OS X, BSD, and Sun Solaris, Nintendo Wii, Sony PlayStation 3 e Apple iPhone.
  13. 13. Histórico• Criado por Miguel de Icaza em 2001, como uma forma de desenvolver aplicações desktop para linux utilizando C#.• Devido a um problema em desenvolver um cliente de email em C.
  14. 14. Mono• O mono hoje suporta praticamente todo o framework .NET (até a versão 4.0), exceto WPF, Entity Framework, WF e WCF (possui uma versão limitada).• Usamos o mono em nossos devices sem nem sabermos !
  15. 15. Exemplos de Aplicações usando oMono• The Sims 3 da Eletronic Arts.
  16. 16. Exemplos de Aplicações usando oMono• Unity 3D, ferramenta de desenvolvimento de jogos para iOS, Android, Browser Games.
  17. 17. Vídeo gerado com Unity3d
  18. 18. Compatibilidade• MoMa (Mono Migration Analyzer)
  19. 19. MonoDevelop• Não é um Visual Studio mas...• Foi criado em 2003, como um fork do SharpDevelop, IDE open source para .NET
  20. 20. MonoDevelop
  21. 21. A Microsoft não é parceira dacomunidade
  22. 22. MS e Comunidade• Programa de MVPs• MS tem se esforçado para se aproximar da comunidade• Suporte para outras linguagens rodarem no framework .NET
  23. 23. MVPs• Programa utilizado para premiar os profissionais que mais se destacaram junto a comunidade durante o ano.• Manter um contato entre a comunidade e o pessoal da MS.
  24. 24. MS e Comunidade• Apoio a projetos open source: • jQuery • Knockout.js • SignalR • Reactive Extensions• NuGet Package Manager• MVC4, Web Api, Razor, e o EntityFramework vão ser desenvolvidos junto com a comunidade em um repositório Git• Codeplex
  25. 25. MS e Comunidade• Suporte oficial para plataformas open source no Azure • Ruby • PHP • Java• Em abril apareceu na lista das 20 empresas que mais contribuíram com o kernel do Linux
  26. 26. Linguagens que rodam noframework .NET• Boo• IronPython• IronRuby• F#• J#• IKVM.NET
  27. 27. OK, o C# é legal !• O C# está aberto a comunidade.• Eu posso usar C# no meu MacOS e no meu Linux.• Mas por que aprender C# ?
  28. 28. Features Legais da Linguagem• Propriedades• Inferência de Tipos• Inicialização Simplificada• Extension Methods• LINQ• Variáveis Dinâmicas• Parâmetros Opcionais/Nomeados• SignalR
  29. 29. Propriedadespublic class Linguagem { private String nome; public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; }}
  30. 30. Propriedadespublic class Linguagem { public String Nome { get; set; }}
  31. 31. Inferência de Tiposint numeroInteiro = 1;List<string> lst = new List<string>();E se pudessemos fazer desse jeito ?var numeroInteiro = 1;var lst = new List<string>();
  32. 32. E nesse caso ?Dictionary<string, List<Person>> hashMap = newDictionary<string, List<Person>>();var hashMap = new Dictionary<string,List<Person>>();
  33. 33. Inicialização SimplificadaPerson person = new Person();person.Nome = "Paulo Ortins";person.Idade = 23;E se pudessemos fazer...var person = new Person() {Nome = "PauloOrtins", Idade = 23};
  34. 34. Inicialização SimplificadaList<Person> lst = new List<Person>();Person paulo = new Person();paulo.Nome = "Paulo Ortins";paulo.Idade = 23;Person obama = new Person();obama.Nome = "Barack Obama";obama.Idade = 51;lst.Add(paulo);lst.Add(obama);
  35. 35. Inicialização Simplificadavar lst = new List<Person>(){ new Person(){Nome = "Paulo Ortins", Idade =23}, new Person(){Nome = "Barack Obama", Idade =51}};
  36. 36. Extension Methods• Método para obter os três últimos caracteres de uma string.public class StringUtil { public static String ObterUltimosCaracteres(String string, int numeroCaracteres) { int ultimaPosicao = string.length(); return string.substring(ultimaPosicao - numeroCaracteres , ultimaPosicao); }}StringUtil.ObterUltimosCaracteres("testando",3);
  37. 37. Extension Methodsstatic string ObterUltimosCaracteres( this string s, int numeroCaracteres) { return s.Substring( s.Length - numeroCaracteres, numeroCaracteres); }"testando".ObterUltimosCaracteres(3);
  38. 38. Extension Methods• Com um pouco de criatividade...Pessoas .ComIdadeIgualA(30) .NascidasNo("Brasil") .MorandoEm("Miami");
  39. 39. LINQ• Language Integrated Query• Feature que nos permite fazer consultas sql-like em coleções: • Em memória • Em SQL • Em XML
  40. 40. Exemplos de Uso do LINQ• Buscar adultos em uma coleção de pessoas// Usando Query Expressionsvar adultos = from pessoa in lstPerson where pessoa.Idade > 18 select pessoa;// Usando Lambda Expressions/Dot Notationvar adultos = lstPerson.Where(x => x.Idade > 18);
  41. 41. Exemplos de Uso do LINQpublic static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate );
  42. 42. Exemplos de Uso do LINQ• Ordenar uma coleção de pessoas pela idade// Query Expressionsvar pessoas = from pessoa in lstPerson orderby pessoa.Idade select pessoa;// Lambda Expressions/Dot Notationvar pessoas = lstPerson.OrderBy(x => x.Idade);
  43. 43. Exemplos de Uso do LINQ• Agrupar pessoas por idade// Query Expressionsvar pessoas = from pessoa in lstPerson group pessoa by pessoa.Idade;// Lambda Expressions/Dot Notationvar pessoas = lstPerson.GroupBy(x => x.Idade);
  44. 44. LINQ to SQL• Se relaciona muito bem com frameworks ORM como Nhibernate e Entity.• Permite usar código C# para fazer consultas no banco.
  45. 45. Exemplo Linq to SQLvar adultos = lstPerson .Where(x => x.Idade > 18);SELECT * FROM People where Idade > 18
  46. 46. Exemplo Linq to SQLvar pessoas = lstPerson.OrderBy(x =>x.Idade);SELECT * FROM People Order by Idade
  47. 47. Variáveis Dinâmicas• C# implementa variáveis do tipo dynamic, que são variáveis que não possuem tipo definido em tempo de compilação• Interoperabilidade com as outras linguagens que rodam na CLR.dynamic variavel = "ola";variavel.Soletrar();variavel = 10;variavel.Somar();
  48. 48. Parâmetros Opcionais/NomeadosLerArquivo("caminho", "paulo");LerArquivo("caminho");public void LerArquivo(string caminho, string nomeLeitor){}public void LerArquivo(string caminho) { string nomeLeitor = "paulo";}
  49. 49. Parâmetros Opcionais/Nomeadospublic void LerArquivo(string caminho, string nomeLeitor = "paulo") {}public void LerArquivo(string caminho, string nomeLeitor = "paulo", string local = "brasil") {}Eu quero alterar apenas o local !LerArquivo("caminho", ?????, ????);
  50. 50. Parâmetros Opcionais/NomeadosLerArquivo(caminho: "caminho");LerArquivo("caminho", local: "estadosunidos");LerArquivo("caminho", nomeLeitor: "paulo");LerArquivo(local: "alemanha", nomeLeitor:"pedro", caminho: "caminho");
  51. 51. SignalR• Framework que usa o HTML5 para prover aplicações em tempo real• Conexão Persistente• Pub/Sub
  52. 52. DotNet Salvador• dotnet-salvador@googlegroups.com• #horaextra• Encontros técnicos
  53. 53. Concluindo...• Objetivo da palestra era mostrar que: • a comunidade está bem movimentada, existem muitos projetos open source rolando, e que podem ser copiados para outras plataformas. • a stack .NET tem evoluido bastante nos últimos anos• Obrigado !• E não esqueçam de comparecer ao #horaextra todas as segundas, 18h30 na Livraria Saraiva do Shopping Iguatemi

×