Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução ao Ruby on Rails

Introdução ao Ruby on Rails

Uma introdução do Ruby e do Rails a programadores Java.

Fabiano Almeida

September 19, 2011
Tweet

More Decks by Fabiano Almeida

Other Decks in Programming

Transcript

  1. Ruby: Agenda • Introdução • Estrutura da Linguagem • Sintaxe

    • Operadores • Classes, Módulos e MixIn • Metaprogramação terça-feira, 27 de setembro de 11
  2. Ruby: Introdução • 1995 - Lançada a primeira versão •

    Interpretadores • JRuby • MRI 1.8 - Matz Ruby Interpreter • IronRuby • Rubinius terça-feira, 27 de setembro de 11
  3. Ruby: Introdução • Inspirações • Smalltalk • Perl • Lisp

    • Scheme • Python • CLU • Eiffel • Ada • Dylan terça-feira, 27 de setembro de 11
  4. Ruby: Estrutura • Linguagem com tipagem dinâmica porém forte meu_texto

    = “abc” meu_texto.class # => String soma = meu_texto + 2 # => TypeError: can’t convert Fixnum into String terça-feira, 27 de setembro de 11
  5. Ruby: Estrutura • Tudo é objeto Object.class # => Class

    5.class # => Fixnum nil.class # => NilClass terça-feira, 27 de setembro de 11
  6. Ruby: Estrutura • Troca de mensagens Object.send( :puts, “Hello Ruby!”

    ) # => Hello Ruby! terça-feira, 27 de setembro de 11
  7. Ruby: Convenções • Declaração de variáveis != CamelCase • Java:

    minhaVariavel • Ruby: minha_variavel terça-feira, 27 de setembro de 11
  8. Ruby: Convenções • Getters e Setters - Não mais get

    e set • Java: getAtributo(); • Ruby: atributo • Java: setAtributo( valor ); • Ruby: atributo= valor terça-feira, 27 de setembro de 11
  9. Ruby: Convenções • Getters e Setters - encapsulamento permanece •

    atributo != @atributo • def atributo @atributo # ‘;’ é opcional end terça-feira, 27 de setembro de 11
  10. Ruby: Convenções • Getters e Setters - encapsulamento permanece •

    def atributo= ( valor ) @atributo = valor end terça-feira, 27 de setembro de 11
  11. Ruby: Convenções • Mais convenções • ( ) e ;

    são opcionais • ; só é requerido quando existe mais de uma instrução em uma mesma linha • var = “abc”; puts var # => abc • A última linha do método é o retorno deste - return é opcional terça-feira, 27 de setembro de 11
  12. Ruby: Sintaxe • Declarações • class MinhaClasse; end • class

    OutraClasse < MinhaClasse; end • minha_instancia = MinhaClasse.new • module MeuModulo; end • var1, var2 = [“valor1”, “valor2”] terça-feira, 27 de setembro de 11
  13. Ruby: Sintaxe • Declarações • minha_lista << “mais_um_valor” • @variavel_de_classe

    = nil • @@varial_de_instancia = Carro.new • :simbolo => “Qualquer texto” • hash = { :key => obj, “key2” => obj2 } terça-feira, 27 de setembro de 11
  14. Ruby: Sintaxe • Operadores • Atribuição • = | +=

    | -= | *= | /= | %= | **= • Atribuição condicional • &&= | &= | ||= | |= terça-feira, 27 de setembro de 11
  15. Ruby: Sintaxe • Operadores • Particular • >> | <<

    | :: | ** • Expressão Regular • == | === | <=> | != | =~ | !~ terça-feira, 27 de setembro de 11
  16. Ruby: Sintaxe • “Palavras reservadas” • require, class, end, module,

    nil, self • def, undef, alias, yield • if, elsif, else, unless, do, while, until, case • begin, ensure, raise, rescue • attr_accessor, attr_reader, attr_writer terça-feira, 27 de setembro de 11
  17. Ruby: Sintaxe • Limpa • 2.times do • puts “Hello

    World” • end • # => Hello World Hello World terça-feira, 27 de setembro de 11
  18. Ruby: Sintaxe • Intuitiva • start_game! unless waiting? • %w(

    JavaScript Ruby).each do |lang| • puts “#{lang} é show!” • end • # => JavaScript é show! Ruby é show! terça-feira, 27 de setembro de 11
  19. Ruby: Sintaxe • Código documentável • if @user.admin? • permitir_qualquer_acao!

    • elsif @user.moderacao? • permitir_alguma_acao • else • puts “Caia fora daqui” • end terça-feira, 27 de setembro de 11
  20. Ruby: Classes, Módulos e MixIn • Classe • Herança •

    Instanciação - Object.new • Definição de métodos • Includes • Getters e Setters terça-feira, 27 de setembro de 11
  21. Ruby: Classes, Módulos e MixIn • class MinhaClasse • attr_accessor

    :nome, :telefone • def initialize(nome, telefone) • self.nome, self.telefone = nome, telefone • end • end • var = MinhaClasse.new(“Marcus Vinícius”, 99439450) # => #<MinhaClasse: 0x000001008dbed0 @name="Marcus Vinicius", @tel=99439450> • var = MinhaClasse.new # => ArgumentError Wrong number of arguments( 0 for 2) terça-feira, 27 de setembro de 11
  22. Ruby: Classes, Módulos e MixIn • Módulos • Repositório de

    Código • Modularização de “Pacotes” • Construção de libs terça-feira, 27 de setembro de 11
  23. Ruby: Classes, Módulos e MixIn • Módulos • module MeuModulo

    • MINHA_CONSTANTE = 12 • def self.metodo_de_instancia #faz alguma coisa end • def metodo_de_classe #faz alguma coisa end • end terça-feira, 27 de setembro de 11
  24. Ruby: Classes, Módulos e MixIn • Módulos • include MeuModule

    # modulos são inclusos ou requeridos não iniciados • MINHA_CONSTATE # => 12 • require “meu_module” • MeuModule::MINHA_CONSTANTE #=> 12 terça-feira, 27 de setembro de 11
  25. Ruby: Classes, Módulos e MixIn • Módulos • def self.metodo_de_instancia

    puts “Método de Instância” end • MeuModulo.metodo_de_instancia • def metodo_de_classe puts “Método de Classe” end • metodo_de_classe # Depois do include terça-feira, 27 de setembro de 11
  26. Ruby: Classes, Módulos e MixIn • MixIn • Mistura métodos

    de módulos em classes • Duck typing - injeção dinâmica de código • DRY - Don’t Repeat Yourself • Modularização terça-feira, 27 de setembro de 11
  27. Ruby: Classes, Módulos e MixIn • MixIn • class MinhaClasse

    # Reabrindo a classe include MeuModulo end • MinhaClasse.send( :include, MeuModulo ) terça-feira, 27 de setembro de 11
  28. Ruby: Classes, Módulos e MixIn • MixIn • MinhaClasse::MINHA_CONSTANTE #

    => 12 • MinhaClasse.metodo_de_instancia # => Método de Instância • minha_classe = MinhaClasse.new minha_classe.metodo_de_classe # => Método de Classe terça-feira, 27 de setembro de 11
  29. Ruby: Modificadores de Acesso • São definidos por blocos •

    As linhas abaixo do modificador estão inclusas no escopo deste modificador • public • private • protected terça-feira, 27 de setembro de 11
  30. Ruby: Modificadores de Acesso • class Exemplo def metodo_publico end

    protected def metodo_protegido end private def metodo_privado end end terça-feira, 27 de setembro de 11
  31. Let’s play! Após o exemplo de modificadores, adicionar um exemplo

    hardcore de metaprogramação! terça-feira, 27 de setembro de 11
  32. Ruby: Metaprogramação • Injeção de código em tempo de execução

    • Modificação de comportamentos (Duck) • Cuidado na utilização • Maior flexibilidade na construção de frameworks terça-feira, 27 de setembro de 11
  33. Ruby: Metaprogramação • Formas de criação • Evals • Proc

    • Block terça-feira, 27 de setembro de 11
  34. Ruby: Metaprogramação • class_eval • MinhaClasse.class_eval do def novo_metodo puts

    “Novo Método” end end terça-feira, 27 de setembro de 11
  35. Ruby: Metaprogramação • instance_eval • MinhaClasse.instance_eval do def novo_metodo_instancia puts

    “Instância: Novo Método” end end terça-feira, 27 de setembro de 11
  36. Ruby: Metaprogramação • instance_eval • minha_classe = MinhaClasse.new minha_classe.novo_metodo_instancia #

    => NoMethodError: undefined method MinhaClasse.novo_metodo_instancia # => Instância: Novo Método terça-feira, 27 de setembro de 11
  37. Ruby: Gem • O que é? • Biblioteca para Ruby

    • Rubygems • GitHub terça-feira, 27 de setembro de 11
  38. Rails: Introdução • O que é? • Framework MVC •

    Motivo => Basecamp {37 Signals} • Convenções • Composição de bibliotecas • Geradores terça-feira, 27 de setembro de 11
  39. Rails: Convenções • DRY - Don’t Repeat Yourself • Teste

    { TDD => Test Driven Development } • Convention Over Configuration • “_” ao invés do CamelCase • Nomes iguais para os itens do MVC • Pluralização do nome dos models terça-feira, 27 de setembro de 11
  40. Rails: Composição • ActionPack => { ActionController, ActionView ... }

    • ActionMailer • ActiveRecord • ActiveSupport • ActiveModel • ActiveResource terça-feira, 27 de setembro de 11
  41. Rails: Estrutura • Aplicação • Configurações • Banco de Dados

    • Biblioteca • Público • Testes terça-feira, 27 de setembro de 11
  42. Rails: ActionPack • ActionController • index • show • new

    - create • edit - update • destroy terça-feira, 27 de setembro de 11
  43. Rails: ActionPack • ActionView • { index, _form, new, edit,

    show }.*.erb • * => html, xml • *.ejs => { JavaScript } • “_form” é um partial => DRY • helper => métodos auxiliares para views terça-feira, 27 de setembro de 11
  44. Rails: ActionPack • ActionDispatch • routes • resources • scope

    • namespace • match terça-feira, 27 de setembro de 11
  45. Rails: ActionPack • ActionDispatch • routes { :resources #=> restful

    } • utilização correta dos verbos HTTP • reaproveitamento de URLs • GET, POST, PUT, DELETE terça-feira, 27 de setembro de 11
  46. Rails: ActionPack • ActionDispatch • routes { :resources #=> restful

    } • resource :my_controller do # adicionar novas actions get ‘my_action’, :on => :collections put ‘my_act’, :on => :member # controller aninhado resource :my_nested_controller end terça-feira, 27 de setembro de 11
  47. Rails: ActionMailer • Facilitador para o envio de e-mails •

    Permite utilizar HTML, CSS e JavaScript terça-feira, 27 de setembro de 11
  48. Rails: ActiveRecord • ORM - Object Relational Mapping • ActiveRecord::Base

    • ActiveRecord::Relation • Migrations • Facilitar o controle de versão do BD terça-feira, 27 de setembro de 11
  49. Rails: ActiveSupport • Facilitadores • Data • Hora • Forma

    de retorno { html, xml, json, yml } • Scaffold • Plurilize terça-feira, 27 de setembro de 11
  50. Rails: ActiveModel • Representa a entidade do BD • Validadores

    • Mensagens de erro • Conversores • Serializadores { json, xml } terça-feira, 27 de setembro de 11
  51. Rails: ActiveResource • Mapeia os models à recursos REST remotos

    • Similar ao ORM do ActiveRecord • Models => tabelas do BD • Criado sobre o formato padrão do XML • Troca mensagens sobre o HTTP • Verbos: GET, POST, PUT e DELETE terça-feira, 27 de setembro de 11
  52. Rails: Geradores • Controller • Model • View • Scaffold

    • Migrations • Test Unit terça-feira, 27 de setembro de 11