Começando a programar na Web?
Então começe com Ruby on Rails.


         Ismael Stahelin
Precisa de um motivo?
    Que tal esse?
Origem
✔ Japão
✔ Yukihiro Matsumoto “Matz”
✔ 2000
   Programming Ruby (Dave Thomas)

✔ 2005
   Ruby on Rails (DHH)
Matz
Ruby


   “Linguagem de programação
dinâmica, interpretada, com uma
complexa, mas expressiva grammática
e uma biblioteca de classe com um
rico e poderoso API”
                         (The Ruby Programming language)
Influências


✔ Lisp
✔ Smalltalk
✔ Perl
Tipos básicos
Variáveis

✔   local = 1
✔   @instancia = “meu nome”
✔   @@classe = /.*/
✔   $global = “alguém me vê?”
Visibilidade

✔ public
✔ Initialize é sempre private
✔ Todos

✔ protected
✔ Instâncias da classe e subclasses

✔ private
✔ Instâncias da classe e subclasses*
Visibilidade para programadores
                             Java

   “Private é para o Ruby o que
     Protected é para o Java”

def <=>(other)
 self.age <=> other.age
end
public, protected, private

class Carro
  public ou protected ou private
    def ano
      @ano
    end
    def ano=(ano)
      @ano = ano
    end
end
public, protected, private
class Carro
    def ano
      @ano
    end
    def ano=(ano)
      @ano = ano
    End
  public :ano, :ano=
  protected :ano, :ano=
  private :ano, :ano=
end
Blocos de código

#executando métodos que aceitam blocos

metodo do |var|
  #corpo do bloco
end

ou

metodo { |var| #corpo do bloco }
Orientação a objetos



✔ Tudo é um objeto
✔ Operações são métodos
✔ Métodos sempre retornam valor
Tudo é um objeto


irb(main):001:0>   1.class         #=>   Fixnum
irb(main):002:0>   1.0.class       #=>   Float
irb(main):003:0>   true.class      #=>   TrueClass
irb(main):004:0>   false.class     #=>   FalseClass
irb(main):005:0>   nil.class       #=>   NilClass
irb(main):006:0>   /.*/.class      #=>   Regexp
irb(main):007:0>   "Hello".class   #=>   String
irb(main):008:0>   :nome.class     #=>   Symbol
Operações são métodos
irb(main):002:0> 1.public_methods.sort
=> ["%", "&", "*", "**", "+", "+@", "-", "-
@", "/", "<", "<<", "<=", "<=>", "==", "===",
"=~", ">", ">=", ">>", "[]", "^", "__id__",
"__send__", "abs", "between?", "ceil", "chr",
"class", "clone", "coerce", "display", "div",
"divmod", "downto", "dup", "enum_for",
"eql?", "equal?", "even?", "extend", "fdiv",
"floor", "freeze", "frozen?", "hash", "id",
"id2name", "inspect", "instance_eval",
"instance_exec" ... ]
Métodos sempre retornam valor



irb(main):001:0> puts "Hello World"
Hello World
=> nil
Mais OO em Ruby

✔   Herança simples
✔   Mixins
✔   Módulos
✔   Duck typing
✔   Tratamento de exceções
✔   Closures
✔   Open classes
Open classes


class Fixnum
  def +(outro)
    self - outro
  end
end
Mas isso não é perigoso?
“Em toda profssão existem os bons
     e os maus profssionais”
Ruby é multi-paradigma



✔   Orientada a objetos
✔   Procedural
✔   Funcional
✔   Metaprogramação
Metaprogramação em Ruby
class Aluno
  #não sabe nada
End                                             Exemplo retirado da
                                              apostila R71 da Caelum.
                                       O melhor exemplo de metaprogramação
                                                     que eu já vi!
class Professor
  def ensina(aluno)
    def aluno.escreve
      “sei escrever!”
    end
  end
end

juca = Aluno.new
juca.respond_to? :escreve # => false

professor = Professor.new
professor.ensina juca
juca.escreve # => “sei escrever!”
Açucar sintático

✔   attr_accessor
✔   Uso de parêntese opcional
✔   “return” é opcional
✔   API expressiva
✔   3.times {print “Oi”}
✔   1.upto(4) {|i| puts i}
✔   10 + 3 # => 10.+(3)
Ok, e porque eu deveria usar Ruby?
       Fale das vantagens...
Pontos positivos


✔   Garbage collector
✔   Extensível via C
✔   Multi-plataforma
✔   DSL

      File.foreach("arq.txt") { |line| puts line }
Pontos negativos


✔   Matemática científca
✔   Manipulação de imagens
✔   Threads
✔   I/O para grandes arquivos
✔   Performance
Plataformas


✔ Linux
✔ Mac OS
✔ Windows
Implementações

✔   MRI (original)
✔   JRuby
✔   IronRuby
✔   Rubinius
✔   Cardinal
✔   MagLev
Já cansou?
Instalando o Ruby

http://www.ruby-lang.org/en/downloads/

              Next > Next > Finish



              port install ruby


              sudo apt-get install ruby-full
Origem

✔ David Heinemeier Hansson (23)
  Experiências com Java e PHP

✔ 2005
✔ Extraído de projeto real
✔ Metaframework
  Composto por outros frameworks
DHH
Ruby on Rails
✔ Convention over Confguration
✔ Don't Repeat Yourself
✔ MVC
✔ Modelo de dados avançado
✔ Software com opinião
✔ Scaffold (CRUD)
Tirando você e o Zézinho da
padaria, quem mais usa Rails?
Big players
    Amazon.com                                        BBC
    CapGemini                                         BPN
    Cisco                                             C|Net
    EA (Electronic Arts)                              IBM
    JP Morgan                                         NASA
    Oakley                                            Oracle
    Siemens                                           ThoughtWorks
    Yahoo!

Fonte: http://blog.obiefernandez.com/content/2008/03/big-name-compan.html
Estrutura do projeto
Estrutura do projeto.

app : onde fca o código da aplicação
  controllers : tratam os requests
  helpers : métodos utilitários, visíveis en controllers e views
  models : persistência e lógica de negócios
  views : layouts e páginas dinâmicas
confg : arquivos de confguração
  environments : production, development e test
  initializers : executados na inicialização da aplicação
Estrutura do projeto..

db : arquivos referentes ao banco de dados
  migrations : migrações da base de dados
doc : documentação do código
lib : código ruby que não é: controller, model ou helper
tasks : tarefas do rake personalizadas
log : todos os arquivos de log da aplicação
Estrutura do projeto...

public : arquivos estáticos
  images : diretório de imagens
  javascripts : diretório de javascripts
  stylesheets : diretório de css
script : scripts do Rails como generate e console
test : todos os testes da aplicação, de todos os tipos
tmp : arquivos temporários de uso do rails
vendor : plugins, rubygems e até mesmo o rails
Composição

✔ ActiveSupport     (infra)

✔ ActiveRecord    (persistência)

✔ ActionPack   (visualização)

✔ ActionMailer   (e-mail)

✔ ActiveResources      (RESTfull)
Pilhas incluídas


✔ Servidores      (WEBrick, Mogrel)

✔ BD   (Sqlite3, Mysql, Postgres, Oracle)
Boas práticas
✔ Siga as convênções
✔ Modelos gordos
✔ Controllers magros
✔ Nomes de entidades em inglês
✔ Tabelas são entidades no plural
✔ FK = <nome_entidade>_id
Scripts

✔   about (informações de versões dos componentes)
✔   console (console com o ambiente da aplicação)
✔   dbconsole (console padrão do banco de dados)
✔   destroy (remover código gerado)
✔   generate (gera código da aplicação automático)
✔   plugin (instala/desinstala plugins)
✔   runner (automatizar tarefas)
✔   server (inicia o servidor da aplicação)
Rake para automatizar

✔ Ferramenta de build (make, ant)
✔ Instalação
 ✔ gem install rake

✔ Tarefas disponíveis
 ✔ rake -T
                      rake db:create
                      rake db:migrate
Migrações

✔ Versionamento do Banco de dados
✔ Executadas 1x (sequencial)
✔ Desenvolvedor é responsável
✔ 2 passos sempre:
 ✔ Realiza alteração
 ✔ Desfaz alteração
ActiveRecord::Migration

class CriarContatos < ActiveRecord::Migrations
 def self.up
   create_table :contatos do |t|
     t.string :nome
     t.string :email
     t.string :telefone
     t.string :endereco
   end
 end

 def self.down
    drop_table :contatos
 end
end
Perguntas?
Hands On!

Agora vamos ver na prática.
http://www.ruby-lang.org        Sites
http://tryruby.org
http://guides.rubyonrails.org
http://railsapi.com
http://railstips.org
http://gemcutter.org
http://rubyforge.org
http://railscasts.com
Livros e apostilas


✔ Ruby on Rails [Rodrigo Urubatan – Novatec]
✔ Caelum – Apostila RR71
✔ A linguagem de Programação Ruby [Matz]
Obrigado :-)

✔ ismael.stahelin@gmail.com
✔ @ismaels
✔ http://ismaels.net

Esta começando a programar para a web? Então começe com Rails

  • 1.
    Começando a programarna Web? Então começe com Ruby on Rails. Ismael Stahelin
  • 2.
    Precisa de ummotivo? Que tal esse?
  • 5.
    Origem ✔ Japão ✔ YukihiroMatsumoto “Matz” ✔ 2000 Programming Ruby (Dave Thomas) ✔ 2005 Ruby on Rails (DHH)
  • 6.
  • 7.
    Ruby “Linguagem de programação dinâmica, interpretada, com uma complexa, mas expressiva grammática e uma biblioteca de classe com um rico e poderoso API” (The Ruby Programming language)
  • 8.
  • 9.
  • 10.
    Variáveis ✔ local = 1 ✔ @instancia = “meu nome” ✔ @@classe = /.*/ ✔ $global = “alguém me vê?”
  • 11.
    Visibilidade ✔ public ✔ Initializeé sempre private ✔ Todos ✔ protected ✔ Instâncias da classe e subclasses ✔ private ✔ Instâncias da classe e subclasses*
  • 12.
    Visibilidade para programadores Java “Private é para o Ruby o que Protected é para o Java” def <=>(other) self.age <=> other.age end
  • 13.
    public, protected, private classCarro public ou protected ou private def ano @ano end def ano=(ano) @ano = ano end end
  • 14.
    public, protected, private classCarro def ano @ano end def ano=(ano) @ano = ano End public :ano, :ano= protected :ano, :ano= private :ano, :ano= end
  • 15.
    Blocos de código #executandométodos que aceitam blocos metodo do |var| #corpo do bloco end ou metodo { |var| #corpo do bloco }
  • 16.
    Orientação a objetos ✔Tudo é um objeto ✔ Operações são métodos ✔ Métodos sempre retornam valor
  • 17.
    Tudo é umobjeto irb(main):001:0> 1.class #=> Fixnum irb(main):002:0> 1.0.class #=> Float irb(main):003:0> true.class #=> TrueClass irb(main):004:0> false.class #=> FalseClass irb(main):005:0> nil.class #=> NilClass irb(main):006:0> /.*/.class #=> Regexp irb(main):007:0> "Hello".class #=> String irb(main):008:0> :nome.class #=> Symbol
  • 18.
    Operações são métodos irb(main):002:0>1.public_methods.sort => ["%", "&", "*", "**", "+", "+@", "-", "- @", "/", "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>", "[]", "^", "__id__", "__send__", "abs", "between?", "ceil", "chr", "class", "clone", "coerce", "display", "div", "divmod", "downto", "dup", "enum_for", "eql?", "equal?", "even?", "extend", "fdiv", "floor", "freeze", "frozen?", "hash", "id", "id2name", "inspect", "instance_eval", "instance_exec" ... ]
  • 19.
    Métodos sempre retornamvalor irb(main):001:0> puts "Hello World" Hello World => nil
  • 20.
    Mais OO emRuby ✔ Herança simples ✔ Mixins ✔ Módulos ✔ Duck typing ✔ Tratamento de exceções ✔ Closures ✔ Open classes
  • 21.
    Open classes class Fixnum def +(outro) self - outro end end
  • 22.
    Mas isso nãoé perigoso?
  • 23.
    “Em toda profssãoexistem os bons e os maus profssionais”
  • 24.
    Ruby é multi-paradigma ✔ Orientada a objetos ✔ Procedural ✔ Funcional ✔ Metaprogramação
  • 25.
    Metaprogramação em Ruby classAluno #não sabe nada End Exemplo retirado da apostila R71 da Caelum. O melhor exemplo de metaprogramação que eu já vi! class Professor def ensina(aluno) def aluno.escreve “sei escrever!” end end end juca = Aluno.new juca.respond_to? :escreve # => false professor = Professor.new professor.ensina juca juca.escreve # => “sei escrever!”
  • 26.
    Açucar sintático ✔ attr_accessor ✔ Uso de parêntese opcional ✔ “return” é opcional ✔ API expressiva ✔ 3.times {print “Oi”} ✔ 1.upto(4) {|i| puts i} ✔ 10 + 3 # => 10.+(3)
  • 27.
    Ok, e porqueeu deveria usar Ruby? Fale das vantagens...
  • 28.
    Pontos positivos ✔ Garbage collector ✔ Extensível via C ✔ Multi-plataforma ✔ DSL File.foreach("arq.txt") { |line| puts line }
  • 29.
    Pontos negativos ✔ Matemática científca ✔ Manipulação de imagens ✔ Threads ✔ I/O para grandes arquivos ✔ Performance
  • 30.
  • 31.
    Implementações ✔ MRI (original) ✔ JRuby ✔ IronRuby ✔ Rubinius ✔ Cardinal ✔ MagLev
  • 32.
  • 33.
    Instalando o Ruby http://www.ruby-lang.org/en/downloads/ Next > Next > Finish port install ruby sudo apt-get install ruby-full
  • 35.
    Origem ✔ David HeinemeierHansson (23) Experiências com Java e PHP ✔ 2005 ✔ Extraído de projeto real ✔ Metaframework Composto por outros frameworks
  • 36.
  • 37.
    Ruby on Rails ✔Convention over Confguration ✔ Don't Repeat Yourself ✔ MVC ✔ Modelo de dados avançado ✔ Software com opinião ✔ Scaffold (CRUD)
  • 38.
    Tirando você eo Zézinho da padaria, quem mais usa Rails?
  • 39.
    Big players Amazon.com BBC CapGemini BPN Cisco C|Net EA (Electronic Arts) IBM JP Morgan NASA Oakley Oracle Siemens ThoughtWorks Yahoo! Fonte: http://blog.obiefernandez.com/content/2008/03/big-name-compan.html
  • 40.
  • 41.
    Estrutura do projeto. app: onde fca o código da aplicação controllers : tratam os requests helpers : métodos utilitários, visíveis en controllers e views models : persistência e lógica de negócios views : layouts e páginas dinâmicas confg : arquivos de confguração environments : production, development e test initializers : executados na inicialização da aplicação
  • 42.
    Estrutura do projeto.. db: arquivos referentes ao banco de dados migrations : migrações da base de dados doc : documentação do código lib : código ruby que não é: controller, model ou helper tasks : tarefas do rake personalizadas log : todos os arquivos de log da aplicação
  • 43.
    Estrutura do projeto... public: arquivos estáticos images : diretório de imagens javascripts : diretório de javascripts stylesheets : diretório de css script : scripts do Rails como generate e console test : todos os testes da aplicação, de todos os tipos tmp : arquivos temporários de uso do rails vendor : plugins, rubygems e até mesmo o rails
  • 44.
    Composição ✔ ActiveSupport (infra) ✔ ActiveRecord (persistência) ✔ ActionPack (visualização) ✔ ActionMailer (e-mail) ✔ ActiveResources (RESTfull)
  • 45.
    Pilhas incluídas ✔ Servidores (WEBrick, Mogrel) ✔ BD (Sqlite3, Mysql, Postgres, Oracle)
  • 46.
    Boas práticas ✔ Sigaas convênções ✔ Modelos gordos ✔ Controllers magros ✔ Nomes de entidades em inglês ✔ Tabelas são entidades no plural ✔ FK = <nome_entidade>_id
  • 47.
    Scripts ✔ about (informações de versões dos componentes) ✔ console (console com o ambiente da aplicação) ✔ dbconsole (console padrão do banco de dados) ✔ destroy (remover código gerado) ✔ generate (gera código da aplicação automático) ✔ plugin (instala/desinstala plugins) ✔ runner (automatizar tarefas) ✔ server (inicia o servidor da aplicação)
  • 48.
    Rake para automatizar ✔Ferramenta de build (make, ant) ✔ Instalação ✔ gem install rake ✔ Tarefas disponíveis ✔ rake -T rake db:create rake db:migrate
  • 49.
    Migrações ✔ Versionamento doBanco de dados ✔ Executadas 1x (sequencial) ✔ Desenvolvedor é responsável ✔ 2 passos sempre: ✔ Realiza alteração ✔ Desfaz alteração
  • 50.
    ActiveRecord::Migration class CriarContatos <ActiveRecord::Migrations def self.up create_table :contatos do |t| t.string :nome t.string :email t.string :telefone t.string :endereco end end def self.down drop_table :contatos end end
  • 51.
  • 52.
    Hands On! Agora vamosver na prática.
  • 53.
    http://www.ruby-lang.org Sites http://tryruby.org http://guides.rubyonrails.org http://railsapi.com http://railstips.org http://gemcutter.org http://rubyforge.org http://railscasts.com
  • 54.
    Livros e apostilas ✔Ruby on Rails [Rodrigo Urubatan – Novatec] ✔ Caelum – Apostila RR71 ✔ A linguagem de Programação Ruby [Matz]
  • 55.
    Obrigado :-) ✔ ismael.stahelin@gmail.com ✔@ismaels ✔ http://ismaels.net