Vamos ver como escrever nossos próprios métodos em Ruby com o auxilio do simples programa p008meusmetodos.rb. Note que nós utilizamos def e end para declarar um método.

Parâmetros são simplesmente uma lista de nomes de variáveis locais contidas entre parênteses.

Nós não declaramos o tipo de retorno; um método retorna o valor do último comando executado no método. É recomendado que você deixe uma única linha em branco entre cada definição de método. Como uma convenção entre os programadores de Ruby, os métodos necessitam que seus parâmetros estejam entre parênteses. Entretanto, comandos como puts, p (falaremos mais sobre esse comando depois), e gets são muito utilizados, a regra dos parênteses não é aplicada. Em Rais, você verá métodos sendo chamados sem parênteses.

 1 # p008meusmetodos.rb
 2 # Um método retorna o valor do último comando executado
 3 #
 4 # Métodos que funcionam como perguntas são normalmente nomeados 
 5 # com um ponto de interrogação (?) no final
 6 #
 7 # Métodos que são "perigosos", ou modificam o objeto, 
 8 # podem ser nomeados com um ponto de exclamação (!) no final (Bang methods)
 9 
10 
11 # Um método simples
12 def ola
13   puts "Olá"
14 end
15 
16 #uso do método
17 ola
18 
19 # Método com argumentos - 1
20 def ola1(nome)
21   puts 'Olá ' + nome
22   return 'sucesso'
23 end
24 
25 puts(ola1('satish'))
26 
27 # Método com argumentos - 2
28 def ola2 nome2
29   puts 'Olá ' + nome2
30   return 'sucesso'
31 end
32 
33 puts(ola2 'talim')

A saída quando executado no meu PC foi:

1 >ruby p008meusmetodos.rb
2 Olá
3 Olá satish
4 sucesso
5 Olá talim
6 sucesso
7 p008meusmetodos.rb:23: warning: parenthesize arguments(s) for future versions
8 >Exit code: 0

Quando você executar o programa acima na versão 1.9, o aviso warning: parenthesize arguments(s) for future version não é exibido. O Yukihiro Matsumoto (Matz) deixou isso claro pois adicionou o aviso para facilitar futuras reimplementações do parser, mas o plano foi cancelado. Além disso, alguém (esqueci o nome, desculpe) convenceu-o de que argumentos sem parênteses facilitam a implementação de DSLs (linguagens de domínio específico) no Ruby. Então, à partir do 1.9, você pode utilizar argumentos sem parênteses em seus métodos.

O Ruby permite que você especifique valores padrão para os argumentos de um método, ou seja, os valores que serão passados caso o método seja chamado sem um argumento explicito. Você faz isso utilizando o operador de atribuição. Veja o exemplo p009meusmetodos1.rb

 1 # p009meusmetodos1.rb
 2 # interpolação é o processo de inserir o resultado de uma expressão
 3 # em uma string literal.
 4 # o operador de interpolação #{...} é avaliado separadamente
 5 def mtd(arg1="Dibya", arg2="Shashank", arg3="Shashank")
 6   "#{arg1}, #{arg2}, #{arg3}."
 7 end
 8 puts mtd
 9 puts mtd("ruby")

A saída quando eu executei no meu PC foi:

1  >ruby p009meusmetodos1.rb
2  Dibya, Shashank, Shashank
3  ruby, Shashank, Shashank
4  >Exit code: 0

Note que não é possível especificar o valor para o segundo parâmetro e utilizar o valor-padrão para o primeiro.

No programa acima, o operador de interpolação #{…} teve sua expressão avaliada separadamente e seu resultado foi “colado” automaticamente na string. Quando executar essas linhas, você não verá o operador em sua tela, verá apenas o resultado da avaliação da expressão que estava contida no operador.

Nota: O nome interpolação refere-se ao processo de inserir o resultado de uma expressão em uma string literal. A forma de fazer isso é colocar sua expressão entre os símbolos #{ e }. O exemplo a seguir demonstra isso:

1 puts "100 * 5 = #{100 * 5}"

Isso resulta em:

1 100 * 5 = 500

O trecho #{100 * 5} interpola o resultado de 100 * 5 (500) na string naquela posição em que o operador foi definido, resultando na saída que foi exibida.

O exemplo p010aliasmtd.rb mostra-nos algo sobre o método de Aliasing (apelido).

1 alias metodo_novo metodo_antigo

O trecho acima cria um novo nome para referenciar um método existente. Quando um método é apelidado (aliased), o novo nome aponta para uma cópia do método antigo. Se o método é redefinido em seguida, o apelido continua invocando a implementação original do método.

 1 # p010aliasmtd.rb
 2 # alias metodo_novo metodo_antigo
 3 # Quando um método é apelidado, o novo nome aponta
 4 # para uma cópia da implementação do método original
 5 
 6 def metodo_antigo
 7   "método antigo"
 8 end
 9 
10 alias metodo_novo metodo_antigo
11 
12 def metodo_antigo
13   "método antigo melhorado"
14 end
15 
16 puts metodo_antigo
17 puts metodo_novo

A saída é:

1 >ruby p010aliasmtd.rb
2 método antigo melhorado
3 método antigo
4 >Exit code: 0

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice