Instruções Gerais:

  • Resolva as atividades em ordem progressiva de maturidade.
  • Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
  • Consulte o gabarito comentado ao final de cada questão para autoavaliação.

🎯 Nível 1: Fundamentos

Problema 16.1 — Classes, Atributos (attr_accessor) e Métodos em Ruby

Contexto: Classes, Atributos (attr_accessor) e Métodos em Ruby no contexto de Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação.

Requisitos de Execução:

  1. Criar classe Produto com attr_reader e método de cálculo de desconto.

Resultado Esperado

Classe Ruby instanciada de forma elegante.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_1_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação
🔑 Gabarito de Código & Solução Comentada
class Produto
  attr_reader :nome, :preco

  def initialize(nome, preco)
    @nome = nome
    @preco = preco
  end

  def com_desconto(percentual)
    @preco * (1.0 - percentual / 100.0)
  end
end

p = Produto.new("Monitor 4K", 2000.0)
puts "Preco com desconto: R$ #{p.com_desconto(10)}" 

🔍 Nível 2: Prática

Problema 16.2 — Blocos, Iteradores e Enumerable (map, select, reduce)

Contexto: Blocos, Iteradores e Enumerable (map, select, reduce) no contexto de Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação.

Requisitos de Execução:

  1. Processar coleção de vendas somando o total e filtrando maiores pedidos com métodos do Enumerable.

Resultado Esperado

Processamento funcional fluído com blocos Ruby.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_2_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação
🔑 Gabarito de Código & Solução Comentada
vendas = [150.0, 45.0, 320.0, 80.0]
grandes_vendas = vendas.select { |v| v > 100.0 }
total = grandes_vendas.reduce(0, :+)

puts "Grandes vendas: #{grandes_vendas}"
puts "Total acumulado: R$ #{total}" 

⚡ Nível 3: Integração

Problema 16.3 — Diferença entre Procs e Lambdas em Ruby

Contexto: Diferença entre Procs e Lambdas em Ruby no contexto de Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação.

Requisitos de Execução:

  1. Demonstrar como lambda verifica rigorosamente o número de argumentos e trata o comando return.

Resultado Esperado

Comportamento de Procs e Lambdas demonstrado com clareza.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_3_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação
🔑 Gabarito de Código & Solução Comentada
minha_lambda = ->(x, y) { x + y }
meu_proc = Proc.new { |x, y| x.to_i + y.to_i }

res_lambda = minha_lambda.call(10, 20)
res_proc = meu_proc.call(10)

puts "Resultado Lambda: #{res_lambda}"
puts "Resultado Proc flexivel: #{res_proc}"
puts "Status: 200 OK"

🏆 Nível 4: Desafio Corporativo

Problema 16.4 — Metaprogramação com define_method e method_missing

Contexto: Metaprogramação com define_method e method_missing no contexto de Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação.

Requisitos de Execução:

  1. Criar métodos dinamicamente com define_method para atributos de configuração corporativa.

Resultado Esperado

Metaprogramação corporativa gerando métodos dinâmicos com elegância.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_4_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Linguagem Ruby: Blocos, Procs, Lambdas e Metaprogramação
🔑 Gabarito de Código & Solução Comentada
class ConfiguracaoDinamica
  def self.adicionar_campo(nome, valor_padrao)
    define_method(nome) { valor_padrao }
  end

  adicionar_campo :ambiente, "producao"
  adicionar_campo :versao, "2.4.0"
end

cfg = ConfiguracaoDinamica.new
puts "Ambiente: #{cfg.ambiente} | Versao: #{cfg.versao}"