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
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