Ruby, Rails e diversão Júlio Santos Monteiro <julio@monteiro.eti.br> 25 de Novembro de 2008
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} (&quot;a&quot;..&quot;z&quot;).each do |char| puts char end
Blocos File.open(&quot;config.txt&quot;) 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 == &quot;&quot; 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 LOC b) 10.000 LOC c) 10^42 LOC
Facilidade de correção
Facilidade para extensão
Menos tempo de desenvolvimento
Menos tempo para 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ícil pois é diferente
Ruby é difícil pois é diferente e é meta-programável
Ruby on Rails é difícil
Ruby on Rails é difícil pois é um framework
Ruby on Rails é difícil pois é um framework e usa Ruby.
Mas vale apena, ao menos aprender para conhecer e aproveitar suas idéias.
Obrigado! Júlio Santos Monteiro <julio@monteiro.eti.br> 25 de Novembro de 2008

Ruby, Rails e Diversão