Café com Java
             11/02/2012



Desenvolvimento ágil de software com

     Ruby on Rails
          Lucas Catón
Quem sou eu?

    Lucas Catón
    Bacharel em Sistemas de Informação
    Desenvolvedor Ruby on Rails há 3 anos




http://blog.lucascaton.com.br       @lucascaton
Antes que me atirem pedras...
Eu já fui programador Java...
Até que eu descobri o Ruby...
Mas eu não vim aqui dizer que:
       Ruby > Java!
Só vim dizer que Ruby...




...me fez um dev mais feliz!
Ruby on Rails
Linguagem de programação   Framework web
O que o Ruby tem de tão especial?
Interpretada
Não é necessário compilar o código!

Dinâmica
Em tempo de execução, é possível: Adicionar novo código,
extender classes, extender objetos, alterar o sistema de tipos.

Multi-paradigma
Orientada a objetos, funcional, permite programação imperativa.

Open-source
Você pode: olhar o código, estudar o código, alterar o código e
ainda melhorar o código.
E mais importante que isso tudo...

    Não precisa de “ponto e vírgula”!
Sintaxe expressíva
      Diga muito!

      Seja claro!

 Escreva menos código!
Exemplo:

    Imprimir somente pares
entre 1 e um número qualquer.
C
#include <stdio.h>
void imprime_pares(int limite)
{
  int i;
  for(i = 1; i < = limite; i++)
    if(i%2 == 0)
      printf("%dn", i);
}
Java
public void imprime_pares(int limite){
  for(int i = 1; i <= limite; i++)
    if(i%2 == 0)
      System.out.println(i);
}
Ruby
def imprime_pares(limite)
  1.upto(limite) {|i| puts i if i%2 == 0}
end
Tudo é um objeto!
1.class                   => Fixnum
1.5.class                 => Float

0.zero?                   => true
1.zero?                   => false

[1,2,3].class             => Array
[4,8].respond_to? :sort   => true

1.methods                 => lista de métodos
5.+(1)                    => 6
true e false também são objetos!



true.class    => TrueClass

false.class   => FalseClass
Até o nil é um objeto!

nil.class   => NilClass

a = nil
a.nil?      =>   true
a.methods   =>   lista de métodos
a.to_s      =>   ""
a.to_i      =>   0

a.sort      => NoMethodError:
                 undefined method `sort' for nil:NilClass
Metaprogramação
class Foo
end

Foo.class_eval do
  define_method("novo_metodo") do |arg|
      puts arg
  end
end

f = Foo.new
f.novo_metodo("123")
# 123
O que o Rails tem de tão especial?
MVC

Model - View - Controller
Ajuda a aplicar a filosofia DRY:

“Don’t repear yourself”
REST
  pattern for web apps

    Verbos HTTP:
GET, POST, PUT, DELETE
Convention over configuration

(Convenção ao invés de configuração)
Antes...
Projeto (10%)        Código (90%)
0     25        50      75      100
Depois...
Projeto (40%)        Código (60%)
0     25        50      75      100
Rails == desenvolvimento ágil
3 ambientes:

 development
  production
     test
Já vem pronto!

Rails é um metaframework.
Action Pack
                      Active Resource
Controllers & Views
                      RESTful web services

 Action Mailer
                      Active Support
  E-mail services
                        Utility classes

 Active Model
                          Railties
+ Active Record
                        Core Rails code
      ORM
Documentação MUITO boa!
Conclusão:

A linguagem é divertida!

O Ruby on Rails já vem pronto pra uso!

Roda em qualquer plataforma!

A comunidade é forte!

O mercado está quente!
Ou seja...
Links interessantes:
Ruby a partir de Java
http://www.ruby-lang.org/pt/documentacao/ruby-a-partir-de-outras-
linguagens/para-ruby-a-partir-de-java/


Guru-SP
https://groups.google.com/group/ruby-sp


Ruby Brasil
http://ruby-br.org/


Ruby Inside
http://www.rubyinside.com/
Dúvidas?
Obrigado!
http://blog.lucascaton.com.br
        @lucascaton

Desenvolvimento ágil de software com Ruby on Rails