Ruby, Rails e Diversão

Preview:

DESCRIPTION

Palestra ministrada dia 25 de novembro de 2008 (2008-11-25) para a turma de Bacharel em Sistemas de Informação da Faculdade Cenecista de Joinville (FCJ), em Joinville/SC.

Citation preview

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 <julio@monteiro.eti.br>

25 de Novembro de 2008