terça-feira, 23 de março de 2010

Ruby on Rails para Javaneses

Há pouco tempo entrei em um projeto voluntário para Web com Ruby on Rails. Legal né?? O problema é que nunca tinha mexido com RoR ou qualquer coisa parecida. Meu forte sempre foi Java, C# e outras linguagens "estáticas". Para quem vem do Java, Ruby é assustador. De cara já tive uma sensação do tipo: "aqui pode tudo", muito diferente do "quase tudo é proibido" do Java.
Passado o perído do "nossa! o que é isso??" logo me entusiasmei com RoR. Tive a sensação de estar com um microfone passando instruções para meu querido PC, pois, com Ruby é assim mesmo "Você fala, Ruby escuta".
Abaixo listo algumas diferenças substanciais que senti entre Ruby e Java.

Instalação - A instalação do conjunto Ruby + gem + Rails é quase mágica. No Windows, na forma mais complicada, a instalação é uma "sequência de Next, executa UM script, executa UM comando". Mas você também pode optar por um pacote "One-click" onde com poucos clicks você já está com tudo rodando perfeitamente. No linux, o processo é igualmente simples. A facilidade da instalação me fez lembrar como apanhei para instalar o JDK pela primeira vez. (instala pacote, configura PATH, configura variáveis de ambiente, bla, bla bla). 


Não há tipos primitivos - Em Ruby "Tudo é um objeto", até mesmo aquele seu Int que é um objeto da classe FixNum. Ou seja, você fazer 4.div(2) que o interpretador irá aceitar normalmente. 
 
Threads independentes de Sistema Operacional - A implementação de threads é feita diretamente no Kernel do Ruby, o que permite rodar processos paralelos em qualquer SO, inclusive no DOS.
Tipagem dinâmica - Não é necessário definir o tipo do objeto antes de instância-lo. Como na grande maioria das linguagens de scripts os  tipos de objetos são definidos em tempo de execução.  Porém, apesar disso Ruby também é fortemente tipado, assim como Java.
Definição de métodos - chega de public boolean blablabla() { } . Em Ruby métodos são iniciados com: def nome() terminados em end e a ultima expressão avaliada sempre é retornada, embora seja possível colocar um return em qualquer parte do código.
          Veja um exemplo:
           def modelo()
            @modelo
           end

           O código acima é a mesma coisa que:
            public String modelo() {
                             return this.modelo;
                        }
           Sentiu a diferença??
 

Parametros default - Parâmetros podem receber um valor default que será assumido caso o método seja chamado sem parâmetros.

def marca(tipo=1) 
                @tipo = tipo
         end


Você pode chamar o método acima tanto com marca(9999) quanto com marca() . No último caso o valor de tipo será 1. Em java você seria obrigado a implementar no minimo dois métodos.

Gets e Setters - Existem 3 formas de definir métodos getters e setters.

          Forma 1:
          #declaração da variável
                      @marca 


          #método get                      
                      def marca
                           @marca
                      end


          #método set
                      def marca = (marca)
                            @marca = marca
                      end


             Forma 2:
             #declaração de variável e getter.
                       attr_reader :marca, :modelo


             #declaração de variável e setter. 
                        attr_writer :cor.


             Forma 3:
             #declaração de variável, getter e setter.
                        attr_accessor :marca, :modelo, :cor.


Lembra do que eu falei no início?? "Você fala, Ruby escuta".
           
Giorge Henrique Abdala 



#################################################
Referência: http://eustaquiorangel.com/downloads/tutorialruby.pdf

Nenhum comentário:

Postar um comentário