Lasagna

Lasagna

Exercício de aprendizagem

Introdução

Este exercício vai te ensinar os blocos de construção fundamentais do Ruby. É bastante conteúdo, mas não se preocupe se parecer muita coisa: vamos nos aprofundar em tudo com muito mais detalhes conforme avançamos pelo track.

Uma das coisas essenciais para entender o Ruby é que ele é uma linguagem orientada a objetos e que tudo no Ruby é um objeto. Números, strings, arrays: todos são objetos.

Variáveis e constantes

Costumamos usar objetos dando nomes a eles, com variáveis ou constantes.

As variáveis são sempre escritas em snake case. Uma variável pode referenciar objetos diferentes ao longo de sua existência. Por exemplo, my_first_variable pode ser definida e redefinida várias vezes com o operador =:

my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new

Já as constantes devem ser atribuídas uma única vez. Elas precisam começar com letra maiúscula e normalmente são escritas em caixa alta, com as palavras separadas por underscores. Por exemplo:

MY_FIRST_CONSTANT = 10

# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"

Classes

O Ruby é organizado em classes. As classes são definidas com a palavra-chave class seguida do nome da classe. Os objetos geralmente são criados instanciando classes com o método .new. Por exemplo:

# Define the class
class Calculator
  #...
end

# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new

Métodos

Unidades de funcionalidade ficam encapsuladas em métodos, semelhantes às funções de outras linguagens.

Um método pode ser definido com argumentos posicionais, argumentos nomeados (definidos e chamados com a sintaxe :) ou não ter nenhum argumento.

Os métodos retornam implicitamente o resultado da última instrução avaliada ou podem retornar explicitamente um objeto com a palavra-chave return.

class Calculator

  # Positional arguments
  def add(num1, num2)
    return num1 + num2 # Explicit return
  end

  # Keyword arguments
  def multiply(num1:, num2:)
    num1 * num2 # Implicit return
  end
end

Os métodos são chamados com a sintaxe .:

calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)

Instruções

Neste exercício, você vai escrever um código para ajudar a preparar uma lasanha incrível do seu livro de receitas favorito.

Você tem quatro tarefas, todas relacionadas ao tempo gasto no preparo da lasanha.

1. Defina o tempo esperado no forno em minutos

Defina a constante Lasagna::EXPECTED_MINUTES_IN_OVEN que retorna quantos minutos a lasanha deve ficar no forno. De acordo com o livro de receitas, o tempo esperado no forno, em minutos, é 40:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. Calcule o tempo restante no forno em minutos

Defina o método Lasagna#remaining_minutes_in_oven que recebe como parâmetro os minutos que a lasanha já passou no forno e retorna quantos minutos ela ainda precisa ficar no forno, com base no tempo esperado no forno em minutos da tarefa anterior.

lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10

3. Calcule o tempo de preparo em minutos

Defina o método Lasagna#preparation_time_in_minutes que recebe como parâmetro o número de camadas que você adicionou à lasanha e retorna quantos minutos você gastou preparando a lasanha, supondo que cada camada leva 2 minutos para preparar.

lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4

4. Calcule o tempo total de trabalho em minutos

Defina o método Lasagna#total_time_in_minutes que recebe dois parâmetros nomeados: o parâmetro number_of_layers é o número de camadas que você adicionou à lasanha, e o parâmetro actual_minutes_in_oven é o número de minutos que a lasanha está no forno. A função deve retornar quantos minutos, no total, você trabalhou no preparo da lasanha, que é a soma do tempo de preparo em minutos com o tempo, em minutos, que a lasanha passou no forno até o momento.

lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Lasagna?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.