1 | 2 | 3 | 4

Ruby em Vinte Minutos

E se quisermos dizer “Olá” varias vezes sem cansar os dedos? Temos que definir um método!

irb(main):010:0> def h
irb(main):011:1> puts "Olá Mundo!"
irb(main):012:1> end
=> nil

O código def h começa a definição do método. Diz ao Ruby que estamos a definir um método, cujo nome é h. A linha seguinte é o corpo do método, a mesma frase que vimos antes: puts "Olá Mundo". Finalmente, a última linha end diz ao Ruby que terminámos a definição do método. A resposta do Ruby => nil diz-nos que sabe que terminamos a definição do método.

As Breves e Repetitivas Vidas de um Método

Agora tentemos correr o método algumas vezes:

irb(main):013:0> h
Olá Mundo!
=> nil
irb(main):014:0> h()
Olá Mundo!
=> nil

Bem, esta foi fácil. Chamar um método em Ruby é tão fácil como mencionar o seu nome ao Ruby. Se o método não tiver parâmetros é tudo o que precisamos. Podemos também colocar os parênteses vazios se desejar-mos, porem estes não são necessários.

E se o que queremos é dizer ola a uma pessoa só, e não ao mundo inteiro? Para isso basta redifinir h para que aceite um nome como parâmetro.

irb(main):015:0> def h(nome)
irb(main):016:1> puts "Olá #{nome}!"
irb(main):017:1> end
=> nil
irb(main):018:0> h("Matz")
Olá Matz!
=> nil

Parece funcionar… mas vamos pausar um minuto para ver o que se passa aqui.

Reservando espaços numa String

O que significa a expressão @#{nome}? É a forma de inserir alguma coisa numa string. Aquilo que se encontra entre chavetas transforma-se numa string (se já não o for) e é substituído naquele ponto da string. Podemos também usar isto para ter a certeza de que o nome de alguém se apresenta em letra maiúscula:

irb(main):019:0> def h(nome = "Mundo")
irb(main):020:1> puts "Olá #{nome.capitalize}!"
irb(main):021:1> end
=> nil
irb(main):022:0> h "chris"
Olá Chris!
=> nil
irb(main):023:0> h
Olá Mundo!
=> nil

Podemos encontrar aqui um truque ou dois. Um deles é que estamos a chamar novamente o método sem recorrer aos parênteses. Se aquilo que estamos a fazer for óbvio então os parênteses são opcionais. O outro truque é o parâmetro Mundo usado por omissão. O que isto quer dizer é que “Se o nome não for fornecido, então usamos o nome por omissão "Mundo".

Evoluindo para um Anfitrião

E se quisermos criar um Anfitrião mais “sério”? Um que se lembre do nosso nome, nos dê as boas vindas e nos trate com o respeio devido? Podemos usar um objecto para esse efeito. Vamos então criar, a classe “Anfitrião”.

irb(main):024:0> class Anfitriao
irb(main):025:1>   def initialize(nome = "Mundo")
irb(main):026:2>     @nome = nome
irb(main):027:2>   end
irb(main):028:1>   def diz_ola
irb(main):029:2>     puts "Olá #{@nome}!"
irb(main):030:2>   end
irb(main):031:1>   def diz_adeus
irb(main):032:2>     puts "Adeus #{@nome}, volte sempre."
irb(main):033:2>   end
irb(main):034:1> end
=> nil

A nova palavra chave aqui é class. Esta define uma nova classe chamada Anfitrião e uma quantidade de métodos para essa classe. E o @nome ? É uma variável de instância e está disponível para todos os métodos da classe. Como podemos ver está a ser utilizada por diz_ola e diz_adeus.

Então como é que pomos a classe Anfitrião em movimento? Criamos um objecto.