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