Já usamos várias funções durante este 4Noobs, como include e sample na página anterior, as funções são muito úteis para automatizar o código, não repetir e facilitar a leitura, para criarmos uma função que mostra um nome na tela é simples:
def nome_tela
puts "Olá Pedro!"
end
nome_tela()
Apenas use def [NOME DA FUNÇÃO], abra um end e neste meio coloque o código da função, depois disso execute ela, que no caso é nome_tela()
, caso não coloque a executação da função, ela não será executada, pois ela precisa ser chamada para seu código ser usado.
Mas e se quisermos passar um nome específico para ser mostrado? Simples:
def nome_tela(nome)
puts "Olá #{nome}!"
end
nome_tela("João")
nome_tela("Maria")
apenas colocamos um () depois do nome da função e a variável nome
que irá representar o nome que iremos passar na chamada á função, depois é só executar e pronto! Agora teste, execute a função sem passar o nome.
Irá ocorrer isso:
irb(main):034:0> nome_tela()
Traceback (most recent call last):
6: from /home/ederson/.asdf/installs/ruby/2.7.1/bin/irb:23:in `<main>'
5: from /home/ederson/.asdf/installs/ruby/2.7.1/bin/irb:23:in `load'
4: from /home/ederson/.asdf/installs/ruby/2.7.1/lib/ruby/gems/2.7.0/gems/irb-1.2.3/exe/irb:11:in `<top (required)>'
3: from (irb):33
2: from (irb):34:in `rescue in irb_binding'
1: from (irb):27:in `nome_tela'
ArgumentError (wrong number of arguments (given 0, expected 1))
O erro diz que a função esperava um argumento, e passamos nenhum, para resolvermos isso é simples:
def nome_tela(nome = "Desconhecido")
puts "Olá #{nome}!"
end
nome_tela("Fabricio")
nome_tela()
como podemos ver, na função, depois de nome temos um = desconhecido
, caso não passemos o nome a função assumirá que ele é Desconhecido.
A função abaixo pega dois números e multiplica eles, olhe abaixo:
def multiplica(num1 = 0, num2 = 1)
multiplicado = num1 * num2
return multiplicado
end
puts multiplica(2,2)
Há uma palavra especial na função, chamada Return, o return expressa qual será o retorno da função, é util para assumirmos o valor de uma variável ser uma certa função ou em outros casos mas neste caso específico, ele não faria muita diferença, mas vamos pensar nesse agora:
def fazer_op(operacao = "soma", num1 = 1, num2 = 1)
case operacao
when "soma"
return num1 + num2
when "subtração"
return num1 - num2
when "multiplicação"
return num1 * num2
when "divisão"
return num1 / num2
else
return "ERRO!"
end
end
puts fazer_op("soma", 3, 4)
Analise o código acima, a função fazer_op recebe 3 parâmetros, a operação, o primeiro e o segundo número, é usado um case para saber se a operação é uma soma, subtração, multiplicação ou uma divisão, e para cada um desses casos, se for verdadeiro a função retornará o num1 sendo operado pelo num2, e se nenhum desses casos for verdadeiro, a função imprime uma mensagem de erro.
Porém, você também pode optar por não fazer uso desta palavra chave, já que em Ruby, o valor da ultima instrução é levado diretamente ao retorno da função, exemplo:
def fazer_op(operacao = "soma", num1 = 1, num2 = 1)
case operacao
when "soma"
num1 + num2
when "subtração"
num1 - num2
end
# ...
end
puts fazer_op("soma", 10, 10) #=> 20