Esta começando a programar para a web? Então começe com Rails
-
Upload
ismaelstahelin -
Category
Technology
-
view
6.144 -
download
1
description
Transcript of Esta começando a programar para a web? Então começe com Rails
![Page 1: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/1.jpg)
Começando a programar na Web?Então começe com Ruby on Rails.
Ismael Stahelin
![Page 2: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/2.jpg)
Precisa de um motivo?Que tal esse?
![Page 3: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/3.jpg)
![Page 4: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/4.jpg)
![Page 5: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/5.jpg)
✔ Japão
✔ Yukihiro Matsumoto “Matz”
✔ 2000
Programming Ruby (Dave Thomas)
✔ 2005
Ruby on Rails (DHH)
Origem
![Page 6: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/6.jpg)
Matz
![Page 7: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/7.jpg)
“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)
Ruby
![Page 8: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/8.jpg)
✔ Lisp✔ Smalltalk✔ Perl
Influências
![Page 9: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/9.jpg)
Tipos básicos
![Page 10: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/10.jpg)
✔ local = 1✔ @instancia = “meu nome”✔ @@classe = /.*/✔ $global = “alguém me vê?”
Variáveis
![Page 11: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/11.jpg)
✔ public✔ Initialize é sempre private✔ Todos
✔ protected✔ Instâncias da classe e subclasses
✔ private✔ Instâncias da classe e subclasses*
Visibilidade
![Page 12: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/12.jpg)
“Private é para o Ruby o que Protected é para o Java”
def <=>(other) self.age <=> other.age end
Visibilidade para programadores Java
![Page 13: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/13.jpg)
class Carro public ou protected ou private def ano @ano end def ano=(ano) @ano = ano endend
public, protected, private
![Page 14: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/14.jpg)
class Carro def ano @ano end def ano=(ano) @ano = ano End public :ano, :ano= protected :ano, :ano= private :ano, :ano=end
public, protected, private
![Page 15: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/15.jpg)
#executando métodos que aceitam blocos
metodo do |var| #corpo do blocoend
ou
metodo { |var| #corpo do bloco }
Blocos de código
![Page 16: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/16.jpg)
✔ Tudo é um objeto✔ Operações são métodos✔ Métodos sempre retornam valor
Orientação a objetos
![Page 17: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/17.jpg)
irb(main):001:0> 1.class #=> Fixnumirb(main):002:0> 1.0.class #=> Floatirb(main):003:0> true.class #=> TrueClassirb(main):004:0> false.class #=> FalseClassirb(main):005:0> nil.class #=> NilClassirb(main):006:0> /.*/.class #=> Regexpirb(main):007:0> "Hello".class #=> Stringirb(main):008:0> :nome.class #=> Symbol
Tudo é um objeto
![Page 18: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/18.jpg)
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" ... ]
Operações são métodos
![Page 19: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/19.jpg)
irb(main):001:0> puts "Hello World"Hello World=> nil
Métodos sempre retornam valor
![Page 20: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/20.jpg)
✔ Herança simples✔ Mixins✔ Módulos✔ Duck typing✔ Tratamento de exceções✔ Closures✔ Open classes
Mais OO em Ruby
![Page 21: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/21.jpg)
class Fixnum def +(outro) self - outro endend
Open classes
![Page 22: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/22.jpg)
Mas isso não é perigoso?
![Page 23: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/23.jpg)
“Em toda profssão existem os bons e os maus profssionais”
![Page 24: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/24.jpg)
✔ Orientada a objetos✔ Procedural✔ Funcional✔ Metaprogramação
Ruby é multi-paradigma
![Page 25: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/25.jpg)
class Aluno #não sabe nadaEnd
class Professor def ensina(aluno) def aluno.escreve “sei escrever!” end endend
juca = Aluno.newjuca.respond_to? :escreve # => false
professor = Professor.newprofessor.ensina jucajuca.escreve # => “sei escrever!”
Metaprogramação em Ruby
Exemplo retirado da apostila R71 da Caelum.
O melhor exemplo de metaprogramação que eu já vi!
![Page 26: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/26.jpg)
✔ 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)
Açucar sintático
![Page 27: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/27.jpg)
Ok, e porque eu deveria usar Ruby?Fale das vantagens...
![Page 28: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/28.jpg)
✔ Garbage collector✔ Extensível via C✔ Multi-plataforma✔ DSL
File.foreach("arq.txt") { |line| puts line }
Pontos positivos
![Page 29: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/29.jpg)
✔ Matemática científca✔ Manipulação de imagens✔ Threads✔ I/O para grandes arquivos✔ Performance
Pontos negativos
![Page 30: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/30.jpg)
✔ Linux ✔ Mac OS✔ Windows
Plataformas
![Page 31: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/31.jpg)
✔ MRI (original) ✔ JRuby✔ IronRuby✔ Rubinius✔ Cardinal✔ MagLev
Implementações
![Page 32: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/32.jpg)
Já cansou?
![Page 33: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/33.jpg)
http://www.ruby-lang.org/en/downloads/
Instalando o Ruby
Next > Next > Finish
port install ruby
sudo apt-get install ruby-full
![Page 34: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/34.jpg)
![Page 35: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/35.jpg)
✔ David Heinemeier Hansson (23) Experiências com Java e PHP
✔ 2005
✔ Extraído de projeto real
✔ Metaframework Composto por outros frameworks
Origem
![Page 36: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/36.jpg)
DHH
![Page 37: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/37.jpg)
✔ Convention over Confguration
✔ Don't Repeat Yourself
✔ MVC
✔ Modelo de dados avançado
✔ Software com opinião
✔ Scaffold (CRUD)
Ruby on Rails
![Page 38: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/38.jpg)
Tirando você e o Zézinho da padaria, quem mais usa Rails?
![Page 39: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/39.jpg)
Amazon.com BBC
CapGemini BPN
Cisco C|Net
EA (Electronic Arts) IBM
JP Morgan NASA
Oakley Oracle
Siemens ThoughtWorks
Yahoo!
Big players
Fonte: http://blog.obiefernandez.com/content/2008/03/big-name-compan.html
![Page 40: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/40.jpg)
Estrutura do projeto
![Page 41: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/41.jpg)
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.
![Page 42: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/42.jpg)
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..
![Page 43: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/43.jpg)
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
Estrutura do projeto...
![Page 44: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/44.jpg)
Composição
✔ ActiveSupport (infra)
✔ ActiveRecord (persistência)
✔ ActionPack (visualização)
✔ ActionMailer (e-mail)
✔ ActiveResources (RESTfull)
![Page 45: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/45.jpg)
Pilhas incluídas
✔ Servidores (WEBrick, Mogrel)
✔ BD (Sqlite3, Mysql, Postgres, Oracle)
![Page 46: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/46.jpg)
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
![Page 47: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/47.jpg)
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)
![Page 48: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/48.jpg)
Rake para automatizar
✔ Ferramenta de build (make, ant)
✔ Instalação✔ gem install rake
✔ Tarefas disponíveis✔ rake -T
rake db:create
rake db:migrate
![Page 49: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/49.jpg)
Migrações
✔ Versionamento do Banco de dados
✔ Executadas 1x (sequencial)
✔ Desenvolvedor é responsável
✔ 2 passos sempre:✔ Realiza alteração
✔ Desfaz alteração
![Page 50: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/50.jpg)
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 endend
ActiveRecord::Migration
![Page 51: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/51.jpg)
Perguntas?
![Page 52: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/52.jpg)
Hands On!
Agora vamos ver na prática.
![Page 53: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/53.jpg)
http://www.ruby-lang.org
http://tryruby.org
http://guides.rubyonrails.org
http://railsapi.com
http://railstips.org
http://gemcutter.org
http://rubyforge.org
http://railscasts.com
Sites
![Page 54: Esta começando a programar para a web? Então começe com Rails](https://reader033.fdocument.pub/reader033/viewer/2022061115/5463f51aaf795974338b4710/html5/thumbnails/54.jpg)
✔ Ruby on Rails [Rodrigo Urubatan – Novatec]
✔ Caelum – Apostila RR71
✔ A linguagem de Programação Ruby [Matz]
Livros e apostilas