Upload
ismaelstahelin
View
6.144
Download
1
Embed Size (px)
DESCRIPTION
Apresentação realzada na semana acadêmica da Unisul em 2010, apresentando a linguagem Ruby e o framework de desenvolvimento Web Ruby on Rails.
Citation preview
Começando a programar na Web?Então começe com Ruby on Rails.
Ismael Stahelin
Precisa de um motivo?Que tal esse?
✔ Japão
✔ Yukihiro Matsumoto “Matz”
✔ 2000
Programming Ruby (Dave Thomas)
✔ 2005
Ruby on Rails (DHH)
Origem
Matz
“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
✔ Lisp✔ Smalltalk✔ Perl
Influências
Tipos básicos
✔ local = 1✔ @instancia = “meu nome”✔ @@classe = /.*/✔ $global = “alguém me vê?”
Variáveis
✔ public✔ Initialize é sempre private✔ Todos
✔ protected✔ Instâncias da classe e subclasses
✔ private✔ Instâncias da classe e subclasses*
Visibilidade
“Private é para o Ruby o que Protected é para o Java”
def <=>(other) self.age <=> other.age end
Visibilidade para programadores Java
class Carro public ou protected ou private def ano @ano end def ano=(ano) @ano = ano endend
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
public, protected, private
#executando métodos que aceitam blocos
metodo do |var| #corpo do blocoend
ou
metodo { |var| #corpo do bloco }
Blocos de código
✔ Tudo é um objeto✔ Operações são métodos✔ Métodos sempre retornam valor
Orientação a objetos
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
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
irb(main):001:0> puts "Hello World"Hello World=> nil
Métodos sempre retornam valor
✔ Herança simples✔ Mixins✔ Módulos✔ Duck typing✔ Tratamento de exceções✔ Closures✔ Open classes
Mais OO em Ruby
class Fixnum def +(outro) self - outro endend
Open classes
Mas isso não é perigoso?
“Em toda profssão existem os bons e os maus profssionais”
✔ Orientada a objetos✔ Procedural✔ Funcional✔ Metaprogramação
Ruby é multi-paradigma
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!
✔ 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
Ok, e porque eu deveria usar Ruby?Fale das vantagens...
✔ Garbage collector✔ Extensível via C✔ Multi-plataforma✔ DSL
File.foreach("arq.txt") { |line| puts line }
Pontos positivos
✔ Matemática científca✔ Manipulação de imagens✔ Threads✔ I/O para grandes arquivos✔ Performance
Pontos negativos
✔ Linux ✔ Mac OS✔ Windows
Plataformas
✔ MRI (original) ✔ JRuby✔ IronRuby✔ Rubinius✔ Cardinal✔ MagLev
Implementações
Já cansou?
http://www.ruby-lang.org/en/downloads/
Instalando o Ruby
Next > Next > Finish
port install ruby
sudo apt-get install ruby-full
✔ David Heinemeier Hansson (23) Experiências com Java e PHP
✔ 2005
✔ Extraído de projeto real
✔ Metaframework Composto por outros frameworks
Origem
DHH
✔ Convention over Confguration
✔ Don't Repeat Yourself
✔ MVC
✔ Modelo de dados avançado
✔ Software com opinião
✔ Scaffold (CRUD)
Ruby on Rails
Tirando você e o Zézinho da padaria, quem mais usa Rails?
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
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
Estrutura do projeto...
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
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
Perguntas?
Hands On!
Agora vamos ver na prática.
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
✔ Ruby on Rails [Rodrigo Urubatan – Novatec]
✔ Caelum – Apostila RR71
✔ A linguagem de Programação Ruby [Matz]
Livros e apostilas