JRuby para programadores Java – Parte 1

O que é Ruby

Você provavelmente já ouviu falar de Ruby, a linguagem que deu vida ao framework web mais badalado do momento, Ruby on Rails. O mundo clama Ruby como sendo uma linguagem de produtividade extrema e Rails como sendo o único framework de desenvolvimento web que realmente funciona, hypes e exageros à parte, Ruby é uma linguagem puramente orientada a objetos com uma sintaxe simples e direta.

Coisas difíceis ou impossíveis de se fazer em outras linguagens, como adicionar métodos a objetos e classes em tempo de execução e reflexão, a possibilidade de descobrir informações sobre um objeto em tempo de execução, mesmo sem conhecê-lo previamente (as bases da meta-programação), são um fato trivial em Ruby e essa é uma das principais fontes de “poder” da linguagem e o que faz Rails ser tão mágico, o código está todo lá, mas você não precisa vê-lo.

O fato de ser puramente orientada a objetos também ajuda a homogeneizar a sintaxe e o funcionamento dos operadores na linguagem, tudo se comporta de forma parecida, sejam strings, números ou o seu objeto cliente, você não precisa aprender regras diferentes para grupos diferentes de itens na linguagem.

O que é este material

A idéia desse material é introduzir Ruby para pessoas que já saibam programar em Java, então a maior parte dos exemplos e comparações vão ser feitas tendo Java como a linguagem base. Se você não sabe Java, o material pode ainda ser interessante, mas não custa nada aprender Java também 🙂

Ruby é uma linguagem interpretada, o interpretador mais famoso é o MRI (Matz Ruby Interpreter), que é escrito em C e é o interpretador comumente utilizado ao se desenvolver aplicações usando Ruby. Outro interpretador muito utilizado é o JRuby, que é um interpretador Ruby escrito em Java e que, conseqüentemente, é executado por uma JVM, no recorrer deste material nós vamos executar o código tanto com o MRI como com JRuby, mas, mais uma vez, o foco é usar JRuby e mostrar como as duas linguagens podem ser integradas de forma simples e fácil.

Os exemplos deste material foram desenvolvidos usando a versão específica do NetBeans para desenvolvimento Ruby, você pode fazer o download dele no site do próprio NetBeans ( http://netbeans.org/ ), ele não é necessário para se escrever ou executar os exemplos, mas vai ser bem mais fácil escrever e executar o código de dentro de uma IDE do que usar apenas a linha de comando.

Primeiros passos com Ruby

Em Ruby, como em outras linguagens de programação orientadas a objeto, os objetos são divididos em classes, vejamos um exemplo de definição de classe:

#arquivo cliente.rb

class Cliente

  def nome
    @nome
  end

  def nome=(novo_nome)
    @nome = novo_nome
  end

end

#criando um objeto do tipo cliente
cliente = Cliente.new

#alterando o nome do objeto cliente
cliente.nome = 'Maurício'

#imprimindo o nome do objeto cliente
puts cliente.nome

A definição de uma classe em Ruby se inicia com a palavra reservada “class”, seguida do nome da classe, que deve começar com uma letra maiúscula e as seguintes minúsculas (assim como em Java). Veja que aqui na classe nós não usamos “{}” (chaves) para “abrir” e “fechar” a definição da classe, há apenas um “end” no final para indicar o fim do corpo da classe. As linhas que começam com “#” (sustenido) são linhas de comentário, funcionam como o “//” em linhas do Java.

Vemos também que dentro da classe Cliente nós definimos métodos:

  def nome=(novo_nome)
    @nome = novo_nome
  end

A definição de métodos em Ruby se inicia com a palavra reservada “def” seguido pelo nome do método e os parâmetros que ele recebe, o método é terminado por um “end”. Olhando para o nosso exemplo, o método é “nome=”, mas o que é esse “=” (igual) no fim do nome do método?

O “=” (igual) indica que esse método pode ser utilizado como se ele fosse uma operação de atribuição para a propriedade “nome” do objeto, veja no exemplo de código:

cliente.nome = 'Maurício'

Em Java, isso só seria possível se “nome” fosse uma variável de instância ou de classe do objeto cliente, mas em Ruby nós podemos fazer isso diretamente com métodos, assim, é possível escrever código que “parece” estar fazendo uma atribuição a uma propriedade de um objeto, mas que na verdade está chamando um método nele.

O método “nome=” seria equivalente a um método “setNome(String nome)” em um objeto Java, a diferença é que sem Java, “setNome()” é visivelmente um método e em Ruby o método parece ser uma atribuição de verdade, a sintaxe continua a mesma, mas o resultado final é diferente.

Ainda no método “nome=” nós vemos que ele faz uma atribuição a uma variável chamada “@nome”, em Ruby, variáveis prefixadas por “@” são as variáveis de instância, então isso quer dizer que os objetos do tipo cliente tem uma variável de instância chamada “@nome”. Em Ruby, diferentemente de Java, não é necessário declarar uma variável de instância antes de utilizá-la. O simples fato de tentar acessar uma variável de instância em um objeto Ruby cria a variável de instância se ela ainda não houver sido criada.

Um detalhe importante das variáveis de instância e dos métodos em Ruby é que enquanto os métodos são, por padrão, públicos (o que quer dizer que qualquer um pode chamá-los), as variáveis de instância são sempre privadas. Não é possível acessar diretamente uma variável de instância de um objeto de fora dele, o máximo que você pode fazer é definir métodos que acessem ou alterem o valor da variável (como nós fizemos na nossa classe Cliente). Mais a frente vamos descobrir como definir o nível de visibilidade dos métodos, mas o nível de visibilidade das variáveis de instância não pode ser alterado.

Outra diferença marcante da linguagem Ruby é a inexistência de tipos para as variáveis/referências. Diferentemente de Java, onde você deve dizer o tipo de todas as variáveis, em Ruby isso não é necessário, por isso nós definimos apenas o nome da variável e não o seu tipo.

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: