Download - Ruby, Rails e Diversão
Júlio Santos Monteiro?
seja.a2c.com.br
Ruby on Rails desde 2006
Desenvolver é Engenharia
Programar é Arte
“Beleza leva a felicidade.Felicidade leva a produtividade.
Logo, beleza leva a produtividade.”
(David Heinemeier Hansson)
“Você pode reconhecer a verdade por sua beleza e
simplicidade.”(Richard Feynman)
Por que o Ruby, se já temos Java, Python, Perl, PHP,
Lisp, .Net, Obj-C, ActionScript, Erlang, Lua, Smalltalk, Haskell,
(digite aqui o nome de uma linguagem), etc?
1993:Yukihiro Matsumoto quer uma linguagem
mais humana.
1993:Yukihiro Matsumoto faz uma linguagem
mais humana.
1993:Yukihiro Matsumoto faz uma linguagem
menos máquina, mais humana.
1993:Yukihiro Matsumoto cria o
Java
1993:Yukihiro Matsumoto cria o
Java
1993:Yukihiro Matsumoto cria o
Ruby
O que é Ruby?
• Linguagem de Script
• Interpretada (e compilável)
• Orientada a objetos (“100%”)
• Programação:– Direta– Simples– Extensível– Portável
• Propósito geral
• Voltada para realização de tarefas rápidas
• Vantagem sobre linguagens compiladas
• Poderosa
• Facilitadora
O que é Ruby?
• Linguagem prática (Perl)
• Orientação a objetos (Smalltalk)
• Metaprogramação (Smalltalk, Lisp)
• Sintaxe (Smalltalk, Eiffel e Ada)
• Tratamento de exceções (Java e Python)
Influências
Características
– Não possui procedimentos nem funções
– Tudo é um objeto
– Objetos possuem métodos
– Métodos são mensagens
– Até mesmo operadores matemáticos são métodos
1.class
1.class=> “Fixnum”
1
1
Ei, 1, me responda a
seguinte pergunta: class
1
Fixnum
1.send(“class”)
1.send(“class”)=> “Fixnum”
Palestra “A Beleza do Ruby”,de Glenn Vanderburg
Observações
• Ruby não é perfeita• Ruby não é a única linguagem linda• Gostos variam com frequência
Blocos
Blocos
• Closures. Funções anônimas. Lambdas.
• Sintaxe concisa (similar a Smalltalk).
• Duas sintaxes
do |a, b|
# código com a, b
end{|a, b| # código com a, b }
Blocos
obj.each do |e|
e.save!
end
array.group_by {|a| a.type}
("a".."z").each do |char| puts charend
Blocos
File.open("config.txt") do |in|
in.each_line do |line|
process_config_line(line)
end
end
(0..100).collect {|n| User.find(n).destroy }
Sintaxe para servir
• Código simples tende a ser mais legível sem pontuação
• Código complexo tende a ser mais legível com pontuação
• Tudo em Ruby, geralmente, tem duas maneiras de ser feito
Exemplos
• Parênteses é opcional
• Ponto-e-vírgula é opcional
• Duas formas de blocos
Classes são abertas
Classes são abertas
• Toda classe pode ser alterada
• Liberdade total
• Flexibilidade no código
• “Ruby Way”
Exemplos
class NilClass
def blank?
true
end
end
class String
def blank?
self == ""
end
end
Você, amanhã, na sua empresa:“Chefinho, vamos usar Ruby?”
O Chefe:“Por que nós iriamos usar Ruby?”
Você:“A linguagem é bonita, fácil de escrever, não é verbalmente
pesada, e é extensível.”
O Chefe:“F*da-se. Para quê tudo isso?Vamos continuar com nosso
excelente _ _ _ _.”
Qual a utilidade disso tudo?
Código simples
Pouco código
É mais fácil achar e corrigir um bug em:
a) 100 LOCb) 10.000 LOCc) 10^42 LOC
Facilidade de correção
Facilidade para extensão
Menos tempo de desenvolvimento
Menos tempopara entregar um produto
(Obs: quando estiver preparando a apresentação, colocar aqui blá-blá-blá sobre a história do Rails e
da 37signals)
Direto ao ponto:
No Rails, você se preocupa com a Lógica de Negócio
Classe Livro: Pertence a um Usuário, tem várias Tags e Tópicos, e tem um Upload. O subtítulo deve ter entre 0 e 256 caracteres A descrição deve ter entre 1 e 1024 caracteres. Tem uma máquina de estados com vários estados e eventos.
class Book < ActiveRecord::Base # Relacionamentos belongs_to :user has_and_belongs_to_many :tags has_and_belongs_to_many :topics has_one :upload # Validações validates_length_of :subtitle, :mininum => 0, :maximum => 256, :allow_nil => true validates_length_of :description, :mininum => 1, :maximum => 1024
acts_as_state_machine :initial => :registred state :passive state :registred state :waiting_processing state :in_processing state :preview state :published state :unpublished event :register do transitions :from => :passive, :to => :registred end # ...end
Hey, mas o framework ______ também faz isso!
Rails usa Ruby
Rails agora é (pelo jeito) mainstream
Observações:
Ruby é difícil
Ruby é difícilpois é diferente
Ruby é difícilpois é diferente
e é meta-programável
Ruby on Rails é difícil
Ruby on Rails é difícilpois é um framework
Ruby on Rails é difícilpois é um framework
e usa Ruby.
Mas vale apena,ao menos aprender
para conhecer e aproveitarsuas idéias.
Obrigado!Júlio Santos Monteiro <[email protected]>
25 de Novembro de 2008