SlideShare a Scribd company logo
1 of 53
C# para a
Comunidade
Paulo Ortins
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
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
Como surgiu a idéia dessa palestra ?

 • Comunidade C# pouco atuante nos
   eventos


 • Comunidade, como um todo, não tinha
   muito interesse por C#
Ausência de projetos open
source
Frameworks de Testes

•   NUnit (http://www.nunit.org/ )
•   MbUnit (http://www.mbunit.com )
•   xUnit (http://xunit.codeplex.com/ )
•   SpecFlow (http://www.specflow.org )
Frameworks de Mock
• Moq (http://code.google.com/p/moq/ )
• Nsubstitute (http://nsubstitute.github.com/ )
• FakeItEasy (https://github.com/fakeiteasy )
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)
Frameworks ORM
• NHibernate (https://github.com/hibernate/hibernate-orm)
• SubSonic (https://github.com/subsonic/SubSonic-3.0)
Frameworks Web
• FubuMVC (https://github.com/DarthFubuMVC/fubumvc)
• OpenRasta (http://openrasta.org/index.html)
• Nancy (https://github.com/NancyFx/Nancy)
Não se pode usar C# no Linux ou
no MacOS
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.
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.
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 !
Exemplos de Aplicações usando o
Mono
• The Sims 3 da Eletronic Arts.
Exemplos de Aplicações usando o
Mono
• Unity 3D, ferramenta de desenvolvimento de jogos para iOS,
  Android, Browser Games.
Vídeo gerado com Unity3d
Compatibilidade
• MoMa (Mono Migration Analyzer)
MonoDevelop
• Não é um Visual Studio mas...



• Foi criado em 2003, como um fork do SharpDevelop, IDE open
  source para .NET
MonoDevelop
A Microsoft não é parceira da
comunidade
MS e Comunidade

• Programa de MVPs

• MS tem se esforçado para se aproximar da comunidade

• Suporte para outras linguagens rodarem no framework .NET
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.
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
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
Linguagens que rodam no
framework .NET
•   Boo
•   IronPython
•   IronRuby
•   F#
•   J#
•   IKVM.NET
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# ?
Features Legais da Linguagem
•   Propriedades
•   Inferência de Tipos
•   Inicialização Simplificada
•   Extension Methods
•   LINQ
•   Variáveis Dinâmicas
•   Parâmetros Opcionais/Nomeados
•   SignalR
Propriedades
public class Linguagem {
  private String nome;

    public String getNome() {
      return this.nome;
    }

    public void setNome(String nome) {
      this.nome = nome;
    }
}
Propriedades
public class Linguagem {
  public String Nome { get; set; }
}
Inferência de Tipos
int numeroInteiro = 1;
List<string> lst = new List<string>();

E se pudessemos fazer desse jeito ?


var numeroInteiro = 1;
var lst = new List<string>();
E nesse caso ?
Dictionary<string, List<Person>> hashMap = new
Dictionary<string, List<Person>>();

var hashMap = new Dictionary<string,
List<Person>>();
Inicialização Simplificada
Person person = new Person();
person.Nome = "Paulo Ortins";
person.Idade = 23;

E se pudessemos fazer...

var person = new Person() {Nome = "Paulo
Ortins", Idade = 23};
Inicialização Simplificada
List<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);
Inicialização Simplificada
var lst = new List<Person>()
{
  new Person(){Nome = "Paulo Ortins", Idade =
23},
  new Person(){Nome = "Barack Obama", Idade =
51}
};
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);
Extension Methods
static string ObterUltimosCaracteres(
  this string s, int numeroCaracteres)
  {
    return s.Substring(
      s.Length - numeroCaracteres,
      numeroCaracteres);
  }

"testando".ObterUltimosCaracteres(3);
Extension Methods
• Com um pouco de criatividade...

Pessoas
  .ComIdadeIgualA(30)
  .NascidasNo("Brasil")
  .MorandoEm("Miami");
LINQ
• Language Integrated Query

• Feature que nos permite fazer consultas sql-like em coleções:
  • Em memória
  • Em SQL
  • Em XML
Exemplos de Uso do LINQ
• Buscar adultos em uma coleção de pessoas

// Usando Query Expressions
var adultos = from pessoa in lstPerson
              where pessoa.Idade > 18
              select pessoa;

// Usando Lambda Expressions/Dot Notation
var adultos = lstPerson.Where(x => x.Idade > 18);
Exemplos de Uso do LINQ
public static IEnumerable<TSource>
     Where<TSource>(
          this IEnumerable<TSource> source,
          Func<TSource, bool> predicate
     );
Exemplos de Uso do LINQ
• Ordenar uma coleção de pessoas pela idade
// Query Expressions
var pessoas = from pessoa in lstPerson
              orderby pessoa.Idade
              select pessoa;

// Lambda Expressions/Dot Notation
var pessoas = lstPerson.OrderBy(x => x.Idade);
Exemplos de Uso do LINQ
• Agrupar pessoas por idade

// Query Expressions
var pessoas = from pessoa in lstPerson
              group pessoa by pessoa.Idade;


// Lambda Expressions/Dot Notation
var pessoas = lstPerson.GroupBy(x => x.Idade);
LINQ to SQL
• Se relaciona muito bem com frameworks ORM como
  Nhibernate e Entity.

• Permite usar código C# para fazer consultas no banco.
Exemplo Linq to SQL
var adultos = lstPerson
     .Where(x => x.Idade > 18);

SELECT * FROM People where Idade > 18
Exemplo Linq to SQL
var pessoas = lstPerson.OrderBy(x =>
x.Idade);

SELECT * FROM People Order by Idade
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();
Parâmetros Opcionais/
Nomeados
LerArquivo("caminho", "paulo");
LerArquivo("caminho");

public void LerArquivo(string caminho,
     string nomeLeitor){}

public void LerArquivo(string caminho) {
     string nomeLeitor = "paulo";
}
Parâmetros Opcionais/
Nomeados
public 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", ?????, ????);
Parâmetros Opcionais/
Nomeados
LerArquivo(caminho: "caminho");

LerArquivo("caminho", local: "estados
unidos");

LerArquivo("caminho", nomeLeitor: "paulo");

LerArquivo(local: "alemanha", nomeLeitor:
"pedro", caminho: "caminho");
SignalR
• Framework que usa o HTML5 para prover aplicações em
  tempo real

• Conexão Persistente

• Pub/Sub
DotNet Salvador
• dotnet-salvador@googlegroups.com

• #horaextra

• Encontros técnicos
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

More Related Content

What's hot

Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresTchelinux
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 

What's hot (20)

Java5
Java5Java5
Java5
 
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio TorresPrincípios de projeto e boas práticas de programação em Java - Márcio Torres
Princípios de projeto e boas práticas de programação em Java - Márcio Torres
 
Java1
Java1Java1
Java1
 
Java4
Java4Java4
Java4
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Java13
Java13Java13
Java13
 
Java7
Java7Java7
Java7
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Java3
Java3Java3
Java3
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 

Similar to SFD - C# para a comunidade

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Desbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus LimaDesbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus LimaMatheus Dos Santos Lima
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Luiz Aldabalde
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010Luiz Aldabalde
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?Felipe Volpone
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonMarinho Brandão
 

Similar to SFD - C# para a comunidade (20)

Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Desbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus LimaDesbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus Lima
 
Poo (1)
Poo (1)Poo (1)
Poo (1)
 
Python Zope Plone - Fiocruz
Python Zope Plone - FiocruzPython Zope Plone - Fiocruz
Python Zope Plone - Fiocruz
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?
 
Apresentação c++ UFC-Quixadá
Apresentação c++ UFC-QuixadáApresentação c++ UFC-Quixadá
Apresentação c++ UFC-Quixadá
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Python Zope Plone - Ftec
Python Zope Plone - FtecPython Zope Plone - Ftec
Python Zope Plone - Ftec
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
 

More from Paulo Cesar Ortins Brito

GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...
GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...
GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...Paulo Cesar Ortins Brito
 
Como participar de comunidades de software mudou a minha carreira e também po...
Como participar de comunidades de software mudou a minha carreira e também po...Como participar de comunidades de software mudou a minha carreira e também po...
Como participar de comunidades de software mudou a minha carreira e também po...Paulo Cesar Ortins Brito
 
Use Xamarin.Forms and surprise your customers when develop native apps, in le...
Use Xamarin.Forms and surprise your customers when develop native apps, in le...Use Xamarin.Forms and surprise your customers when develop native apps, in le...
Use Xamarin.Forms and surprise your customers when develop native apps, in le...Paulo Cesar Ortins Brito
 
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...Paulo Cesar Ortins Brito
 
GDG Dev Fest Extended - Mobilidade além do smartphone
GDG Dev Fest Extended - Mobilidade além do smartphoneGDG Dev Fest Extended - Mobilidade além do smartphone
GDG Dev Fest Extended - Mobilidade além do smartphonePaulo Cesar Ortins Brito
 
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...Paulo Cesar Ortins Brito
 
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...Paulo Cesar Ortins Brito
 
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...Paulo Cesar Ortins Brito
 
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...Paulo Cesar Ortins Brito
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Paulo Cesar Ortins Brito
 
Explicando conceitos de software usando situações do cotidiano
Explicando conceitos de software usando situações do cotidianoExplicando conceitos de software usando situações do cotidiano
Explicando conceitos de software usando situações do cotidianoPaulo Cesar Ortins Brito
 
Tests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularTests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularPaulo Cesar Ortins Brito
 

More from Paulo Cesar Ortins Brito (14)

GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...
GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...
GDG DevFest Nordeste - Quer desenvolver aplicações mobile nativas, cross-plat...
 
Como participar de comunidades de software mudou a minha carreira e também po...
Como participar de comunidades de software mudou a minha carreira e também po...Como participar de comunidades de software mudou a minha carreira e também po...
Como participar de comunidades de software mudou a minha carreira e também po...
 
Use Xamarin.Forms and surprise your customers when develop native apps, in le...
Use Xamarin.Forms and surprise your customers when develop native apps, in le...Use Xamarin.Forms and surprise your customers when develop native apps, in le...
Use Xamarin.Forms and surprise your customers when develop native apps, in le...
 
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
 
GDG Dev Fest Extended - Mobilidade além do smartphone
GDG Dev Fest Extended - Mobilidade além do smartphoneGDG Dev Fest Extended - Mobilidade além do smartphone
GDG Dev Fest Extended - Mobilidade além do smartphone
 
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...
GDG Tech Talk - Quer desenvolver aplicações nativas e cross-plataforma usando...
 
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
 
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...
Semana Computação UFBA 2014 - Quer desenvolver aplicações nativas e cross-pla...
 
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...
Semana Computação Unifacs 2014 - Quer desenvolver aplicações nativas e cross-...
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#
 
Métricas de Código
Métricas de CódigoMétricas de Código
Métricas de Código
 
Explicando conceitos de software usando situações do cotidiano
Explicando conceitos de software usando situações do cotidianoExplicando conceitos de software usando situações do cotidiano
Explicando conceitos de software usando situações do cotidiano
 
Tests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and TestacularTests in Javascript using Jasmine and Testacular
Tests in Javascript using Jasmine and Testacular
 
A vez do mobile - Dev in Bahia #3
A vez do mobile - Dev in Bahia #3A vez do mobile - Dev in Bahia #3
A vez do mobile - Dev in Bahia #3
 

SFD - C# para a comunidade

  • 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. 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. 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. Ausência de projetos open source
  • 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. Frameworks de Mock • Moq (http://code.google.com/p/moq/ ) • Nsubstitute (http://nsubstitute.github.com/ ) • FakeItEasy (https://github.com/fakeiteasy )
  • 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. Frameworks ORM • NHibernate (https://github.com/hibernate/hibernate-orm) • SubSonic (https://github.com/subsonic/SubSonic-3.0)
  • 10. Frameworks Web • FubuMVC (https://github.com/DarthFubuMVC/fubumvc) • OpenRasta (http://openrasta.org/index.html) • Nancy (https://github.com/NancyFx/Nancy)
  • 11. Não se pode usar C# no Linux ou no MacOS
  • 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. 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. 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. Exemplos de Aplicações usando o Mono • The Sims 3 da Eletronic Arts.
  • 16. Exemplos de Aplicações usando o Mono • Unity 3D, ferramenta de desenvolvimento de jogos para iOS, Android, Browser Games.
  • 17. Vídeo gerado com Unity3d
  • 18. Compatibilidade • MoMa (Mono Migration Analyzer)
  • 19. MonoDevelop • Não é um Visual Studio mas... • Foi criado em 2003, como um fork do SharpDevelop, IDE open source para .NET
  • 21. A Microsoft não é parceira da comunidade
  • 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. 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. 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. 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. Linguagens que rodam no framework .NET • Boo • IronPython • IronRuby • F# • J# • IKVM.NET
  • 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. 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. Propriedades public class Linguagem { private String nome; public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } }
  • 30. Propriedades public class Linguagem { public String Nome { get; set; } }
  • 31. Inferência de Tipos int numeroInteiro = 1; List<string> lst = new List<string>(); E se pudessemos fazer desse jeito ? var numeroInteiro = 1; var lst = new List<string>();
  • 32. E nesse caso ? Dictionary<string, List<Person>> hashMap = new Dictionary<string, List<Person>>(); var hashMap = new Dictionary<string, List<Person>>();
  • 33. Inicialização Simplificada Person person = new Person(); person.Nome = "Paulo Ortins"; person.Idade = 23; E se pudessemos fazer... var person = new Person() {Nome = "Paulo Ortins", Idade = 23};
  • 34. Inicialização Simplificada List<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. Inicialização Simplificada var lst = new List<Person>() { new Person(){Nome = "Paulo Ortins", Idade = 23}, new Person(){Nome = "Barack Obama", Idade = 51} };
  • 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. Extension Methods static string ObterUltimosCaracteres( this string s, int numeroCaracteres) { return s.Substring( s.Length - numeroCaracteres, numeroCaracteres); } "testando".ObterUltimosCaracteres(3);
  • 38. Extension Methods • Com um pouco de criatividade... Pessoas .ComIdadeIgualA(30) .NascidasNo("Brasil") .MorandoEm("Miami");
  • 39. LINQ • Language Integrated Query • Feature que nos permite fazer consultas sql-like em coleções: • Em memória • Em SQL • Em XML
  • 40. Exemplos de Uso do LINQ • Buscar adultos em uma coleção de pessoas // Usando Query Expressions var adultos = from pessoa in lstPerson where pessoa.Idade > 18 select pessoa; // Usando Lambda Expressions/Dot Notation var adultos = lstPerson.Where(x => x.Idade > 18);
  • 41. Exemplos de Uso do LINQ public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate );
  • 42. Exemplos de Uso do LINQ • Ordenar uma coleção de pessoas pela idade // Query Expressions var pessoas = from pessoa in lstPerson orderby pessoa.Idade select pessoa; // Lambda Expressions/Dot Notation var pessoas = lstPerson.OrderBy(x => x.Idade);
  • 43. Exemplos de Uso do LINQ • Agrupar pessoas por idade // Query Expressions var pessoas = from pessoa in lstPerson group pessoa by pessoa.Idade; // Lambda Expressions/Dot Notation var pessoas = lstPerson.GroupBy(x => x.Idade);
  • 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. Exemplo Linq to SQL var adultos = lstPerson .Where(x => x.Idade > 18); SELECT * FROM People where Idade > 18
  • 46. Exemplo Linq to SQL var pessoas = lstPerson.OrderBy(x => x.Idade); SELECT * FROM People Order by Idade
  • 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. Parâmetros Opcionais/ Nomeados LerArquivo("caminho", "paulo"); LerArquivo("caminho"); public void LerArquivo(string caminho, string nomeLeitor){} public void LerArquivo(string caminho) { string nomeLeitor = "paulo"; }
  • 49. Parâmetros Opcionais/ Nomeados public 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. Parâmetros Opcionais/ Nomeados LerArquivo(caminho: "caminho"); LerArquivo("caminho", local: "estados unidos"); LerArquivo("caminho", nomeLeitor: "paulo"); LerArquivo(local: "alemanha", nomeLeitor: "pedro", caminho: "caminho");
  • 51. SignalR • Framework que usa o HTML5 para prover aplicações em tempo real • Conexão Persistente • Pub/Sub
  • 52. DotNet Salvador • dotnet-salvador@googlegroups.com • #horaextra • Encontros técnicos
  • 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