Menu
Coddy logo textTech

do..end vs Chaves

Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 16 de 56.

Ruby oferece duas maneiras de escrever um bloco. Elas significam a mesma coisa, mas cada uma tem um caso de uso preferencial.

do...end é para blocos de múltiplas linhas:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Chaves { ... } são para blocos de linha única, curtos, em formato de expressão:

[1, 2, 3].each { |n| puts n * 2 }

Os dois têm precedências ligeiramente diferentes, mas a regra que os alunos precisam é a de estilo: chaves para instruções de uma linha, do...end para múltiplas linhas.

Ambas as formas podem retornar um valor. A última expressão do bloco é o que é passado de volta para métodos como map:

[1, 2, 3].map { |n| n * 10 }    # [10, 20, 30]
[1, 2, 3].map do |n|
  n * 10
end                              # [10, 20, 30]
challenge icon

Desafio

Fácil

Leia uma lista de inteiros separados por vírgula da entrada. Imprima duas linhas:

  1. Cada número dobrado, unido com , . Use a forma de chaves (brace) do map.
  2. A string "<n> squared is <n*n>" para cada número, uma por linha. Use a forma do...end do each.

Para a entrada 1,2,3, a saída é:

2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9

Folha de consulta

Blocos Ruby possuem duas sintaxes:

Chaves { ... } para blocos de uma única linha:

[1, 2, 3].map { |n| n * 2 }  # [2, 4, 6]

do...end para blocos de múltiplas linhas:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Ambas as formas retornam a última expressão do bloco (usada por métodos como map).

Experimente você mesmo

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: linha 1, dobrados, forma de chaves do map, unidos com ", "
# TODO: linhas 2..n, quadrados, forma do...end do each
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo