Para Ruby a partir de Java

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 de import.
  • 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 de int[] 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 de Foo 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 de null.