All Articles

Linguagem Ruby: uma conversa com objetos

Em Ruby, assim como no mundo real, tudo é um objeto. Inteiros, Textos, Arrays. Enfim, tudo que é manipulado é um objeto e o retorno dessa manipulação também é um objeto. Para que as coisas aconteçam em Ruby é preciso que os objetos conversem entre si dizendo o que é preciso ser feito. Essa comunicação é feita através de métodos, basicamente um objeto chama ou invoca o método de outro objeto fazendo assim a comunicação entre si.

A forma de criar um objeto é através de um construtor, um método especial associado a uma classe. o new é o construtor padrão da linguagem. Para criar uma classe usamos a palavra reservada class seguida do nome(que ao iniciar com letra maiúscula se torna uma constante) e para delimitar o final da classe usamos a palavra reservada end. Assim como todos os tipo em Ruby, o nome da classe também é uma constante, se for um nome composto deverá seguir o padrão Camel Case.

Estrutura básica de uma classe

class PensadorProfundo     

end

o que a classe PensadorProfundo faz?

Diz a lenda que a classe PensadorProfundo foi criada por seres extra terrestres que tinham o intuito de descobrir a resposta para a vida, o universo e tudo mais. Claro que uma classe com esse objetivo é extremamente complexa mesmo escrita em Ruby. Então não iremos implementar a nossa versão da classe PensadorProfundo. Até mesmo porque a resposta para a vida, o universo e tudo mais já foi obtida, sendo uma resposta muito satisfatória.

Ruby é uma linguagem orientada a objetos genuína e foi bastante inspirada na linguagem Smalltalk. Tudo que manipulamos é um objeto e o retorno dessa manipulação também é um objeto. A interação dos objetos é feita através de métodos. Um objeto chama ou invoca um método em outro objeto, podemos exemplificar da seguinte maneira, no terminal abra o IRB e digite o seguinte código:

irb(main):001:0> "Uma String também é um objeto".object_id()=> 47257605684400

Aqui passamos a string para o método object_id() que nos retorna o numero de referencia ou seja, o identificador único do objeto passado. Ainda não ficou claro? então vamos verificar a classe de um objeto:

irb(main):002:0> "Qual a classe da minha string?".class=> String

Chamamos o método class passando nosso objeto, ele retorna a classe a qual o objeto pertence. O método class faz parte da classe Object. Toda classe em Ruby herda da classe Object, sendo assim, o método class está disponível em qualquer objeto criado.

Conferindo os docs

Para aprofundar confira a descrição da classe Object na documentação oficial em seguida confira a documentação do método class.

Através de um objeto é possível chamar métodos encadeados:

irb(main):003:0> 1.next.to_s=> "2"

Pegamos o numero 1 que é um objeto da classe Fixnum, passamos para o método next que nos retorna o próximo número e em seguida transformamos esse número em string.
Para saber quais métodos estão disponíveis em um objeto basta usar o método methods:

irb(main):001:0> 1.methods.sort

Usando methods obtemos uma lista de todos os métodos de um objeto e o método sort faz a ordenação do resultado.
Veja o resultado:

Métodos com argumentos

Ao invocar métodos podemos passar informações adicionais que são chamadas de argumentos:

irb(main):002:0> ['zaphod'undefined'ford'undefined'arthur' ].index('ford')

No exemplo passamos um array de nomes para o método index que recebe o parâmetro ‘ford’ e retorna a posição desse parâmetro no array.

Por hoje é só pessoal! essa foi uma abordagem leve de Orientação a Objetos na linguagem Ruby. Claro que o conteúdo é extremamente extenso e devemos ir estudando para conseguir um domínio maior da linguagem com o tempo. Como disse o criador da linguagem Yukihiro Matsumoto:

“Ruby is simple in appearance, but is very complex inside, just like our human body”