Ruby Avançado: Blocks, Lambdas e Módulos 🚀
Aula 8 do curso de Ruby da OneBitCode
Blocks em Ruby
Blocks são funções anônimas (sem nome) que encapsulam um conjunto de instruções. Podem ser passados como argumentos para métodos.
🔹 Sintaxe com {}
3.times { puts "Hello!" }
🔸 Sintaxe com do/end
[1, 2, 3].each do |num|
puts num * 2
end
Criando Métodos que Aceitam Blocks
def greet
puts "Before block"
yield # Executa o block
puts "After block"
end
greet { puts "Inside the block" }
Lambdas em Ruby
Lambdas são objetos que encapsulam funções anônimas e podem ser armazenados em variáveis.
# Criando um lambda
capitalize = lambda { |name| name.capitalize }
# Chamando o lambda
puts capitalize.call("leonardo") # "Leonardo"
Diferenças entre Blocks e Lambdas
| Característica | Block | Lambda |
|---|---|---|
| Armazenável em variável | ❌ Não | ✅ Sim |
| Verifica número de argumentos | ❌ Não | ✅ Sim |
| Retorno | Retorna do método | Retorna apenas do lambda |
Módulos em Ruby
📂 Namespaces
Agrupar classes/métodos para evitar conflitos de nomes
module Finance
class Invoice
# ...
end
end
inv = Finance::Invoice.new
🧩 Mixins
Reutilizar métodos em múltiplas classes
module Loggable
def log(message)
puts "[LOG] #{message}"
end
end
class Product
include Loggable
end
Include vs Extend
module Tools
def hammer
"Hammering!"
end
end
class Worker
include Tools # Métodos de instância
end
class Company
extend Tools # Métodos de classe
end
Worker.new.hammer # "Hammering!"
Company.hammer # "Hammering!"
🎯 Missões Especiais
-
Capitalize com Lambda: Crie um lambda que usa o método
capitalizee passe-o para um métodocapitalize_nameque aplica o lambda a dois nomes diferentes.# Exemplo de uso: capitalize_name(lambda { |n| n.capitalize }, "leonardo", "maria") # Deve retornar ["Leonardo", "Maria"] -
Módulo Person: Crie um módulo
Personcom classesJuridicalePhysicalque mostram mensagens específicas quando instanciadas. -
Pesquisa sobre Procs: Pesquise sobre
Procno Ruby e implemente pequenos exemplos para entender as diferenças entre Proc e lambda.
Próximos Passos
Na próxima aula, exploraremos:
- Expressões Regulares (Regexp) em Ruby
- Trabalhando com datas e horas
- Manipulação avançada de strings
- Métodos úteis da classe Time
0 Comentários