def: nomeando um pedaço reaproveitável de lógica

Prévia grátis 3 min de leitura

Algo que você vem lendo esse tempo todo

def apareceu em quase todo exemplo desde Variáveis e atribuição: calculate_total, BankAccount, symbolize_keys, average. Em cada vez, demonstrava outra coisa, como escopo ou conversão de symbol. Este curso faz do def o assunto: como definir um método e o que acontece quando você o chama.

A forma básica

def greet
  puts "Hello!"
end

greet
# Hello!

def, um nome, um corpo, end. Chamar o nome, greet, roda o corpo em ordem, uma vez por chamada. A aula 4 do curso de variáveis usou isso para mostrar escopo sem explicar a sintaxe.

Por que métodos existem: nomeando repetição para longe

Um método dá nome a uma lógica que, sem ele, você escreveria toda vez que precisasse.

# Sem um método: lógica repetida, idêntica
puts "Welcome, valued customer!"
# ... depois, a mesma mensagem é necessária de novo ...
puts "Welcome, valued customer!"

# Com um método: escrito uma vez, chamado em qualquer lugar
def welcome_message
  puts "Welcome, valued customer!"
end

welcome_message
welcome_message

Mude a mensagem depois e a versão com método tem um lugar só para editar; toda chamada recebe a mudança. Sem ele, cada cópia precisa da própria edição, e é fácil esquecer uma.

Chamando com e sem parênteses

O Ruby aceita uma chamada com ou sem parênteses, e as duas funcionam igual:

greet()
greet

Código Ruby costuma tirar os parênteses quando não há argumentos, como acima, e usá-los quando há, o assunto da próxima aula. Nenhum dos dois está errado. É uma convenção da comunidade, uma das alternativas expressivas de Ruby: felicidade do dev.

Nomeando métodos: as mesmas regras de variáveis

Nomes de método seguem as regras de nome do curso de variáveis: snake_case, começando com minúscula. Um método que responde sim ou não termina em ?, como empty?, zero? e passing?. Você já leu chamadas de todos eles, só nunca o def.

def valid_email?(text)
  text.include?("@")
end

Nada novo na sintaxe. ? é válido no fim de um nome de método, e a comunidade o reserva para métodos que devolvem booleano.

O que este curso cobre

  • Aula 1, def, dando nome a lógica reaproveitável: a forma básica, e por que métodos existem (você está aqui)
  • Aula 2, Parâmetros: alimentando valores num método, e o que acontece quando a contagem não bate
  • Aula 3, Valores padrão de parâmetro: tornando um argumento opcional
  • Aula 4, Retorno implícito: o valor que um método entrega de volta, sem palavra-chave return necessária
  • Aula 5, A palavra-chave return: saindo de um método cedo, de propósito
  • Aula 6, Argumentos nomeados: nomeando valores no ponto de chamada em vez de depender de posição
  • Aula 7, Juntando tudo: um pequeno desafio combinando tudo

No final, todo def que você leu sem contexto vai fazer sentido, e você vai escrever os seus.

Aula 1 de 7 · grátis

Continue com a aula 2

Parâmetros: alimentando valores num método

Mostra parâmetros como variáveis locais preenchidas pela posição e o ArgumentError gerado quando a contagem de argumentos está errada.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...