Java é maduro. Está testado. E é rápido (contrariamente ao que todos os grupos anti-java possam dizer). Também é bastante palavroso. Ao passares de Java para Ruby, o programador poderá esperar que o tamanho do seu código diminua consideravelmente. Também poderá esperar demorar menos tempo a criar um prototipo aplicacional.
Semelhanças
Tal como em Java, em Ruby…
- A memoria é gerida automaticamente através de um garbage collector.
- Os Objectos são fortemente tipados.
- Existem métodos públicos, privados e protegidos.
- Existem ferramentas de documentação embebidas (a de Ruby chama-se RDoc). A documentação gerada pelo RDoc tem um aspecto muito parecido aquela gerada pelo Javadoc.
Diferenças
Ao contrário de Java, em Ruby…
- Não precisará de compilar código-fonte, pois este é executado directamente.
- Existem vários conjuntos de ferramentas de desenvolvimento com interface gráfica (GUI). Os utilizadores de Ruby podem experimentar WxRuby, FXRuby, Ruby-GNOME2, Qt, ou o biblioteca nativa Ruby Tk, por exemplo.
- Utiliza-se a palavra-chave
end
para terminar a definição de uma classe em vez de se colocar parentesis á volta de blocos de código. - Utiliza-se o
require
em vez deimport
. - Todas as variáveis de instância são privadas. Podem, no entanto, ser acedidas externamente através de métodos.
- Os parêntesis nas chamadas aos métodos são normalmente opcionais e muitas vezes omitidas.
- Tudo é um objecto, incluído numeros como 2 ou o 3.14159.
- Não existe validação estática de tipos de dados.
- Os nomes de variáveis são apenas etiquetas. Não têm qualquer tipo de dado associado a elas.
- Não existe declaração de tipo de dados, estes são associados a novos
nomes de variáveis conforme se necessite (por exemplo
a = [1,2,3]
em vez deint[] a = {1,2,3};
). - Não existe transformação de tipos de dados (casting). Basta chamar os métodos. Os seus testes unitários deverão avisa-lo se existe uma excepção antes da execução do código.
- Escreve-se
foo = Foo.new("ola")
em vez deFoo foo = new Foo("ola")
. - O construtor é sempre chamado “initialize” em vez do nome da classe.
- Temos “mixins” em vez de interfaces.
- O uso de YAML é favorecido em relação ao XML.
- Utiliza-se
nil
em vez denull
.