Este exercício vai ensinar-te os blocos de construção fundamentais do Ruby. Aborda muita matéria, mas não te preocupes se parecer demasiado: vamos aprofundar tudo muito mais à medida que avançamos no percurso.
Uma das coisas fundamentais a compreender sobre o Ruby é que é uma linguagem orientada a objetos e que tudo em Ruby é um objeto. Números, strings, arrays: são todos objetos.
Costumamos usar objetos atribuindo-lhes nomes, através de variáveis ou de constantes.
As variáveis escrevem-se sempre em snake case.
Uma variável pode referenciar objetos diferentes ao longo do seu ciclo de vida.
Por exemplo, my_first_variable pode ser definida e redefinida muitas vezes com o operador =:
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
As constantes, por outro lado, destinam-se a ser atribuídas uma única vez. Têm de começar com letras maiúsculas e, normalmente, escrevem-se em maiúsculas, com as palavras separadas por underscores. Por exemplo:
MY_FIRST_CONSTANT = 10
# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"
O Ruby está organizado em classes.
As classes definem-se com a palavra-chave class, seguida do nome da classe.
Os objetos são geralmente 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
As unidades de funcionalidade são encapsuladas em métodos, semelhantes às funções de outras linguagens.
Um método pode ser definido com argumentos posicionais, com argumentos de palavra-chave (que se definem e se chamam com a sintaxe :) ou não ter argumentos nenhuns.
Os métodos devolvem implicitamente o resultado da última instrução avaliada ou podem devolver explicitamente um objeto através da 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 invocam-se com a sintaxe .:
calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)
Neste exercício vais escrever algum código para te ajudar a cozinhar uma lasanha fantástica do teu livro de receitas preferido.
Tens quatro tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.
Define a constante Lasagna::EXPECTED_MINUTES_IN_OVEN, que devolve quantos minutos a lasanha deve estar no forno. Segundo o livro de receitas, o tempo esperado no forno em minutos é 40:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Define o método Lasagna#remaining_minutes_in_oven, que recebe como parâmetro os minutos que a lasanha já esteve no forno e devolve quantos minutos a lasanha ainda tem de permanecer no forno, com base no tempo esperado no forno em minutos da tarefa anterior.
lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10
Define o método Lasagna#preparation_time_in_minutes, que recebe como parâmetro o número de camadas que adicionaste à lasanha e devolve quantos minutos gastaste a preparar a lasanha, partindo do princípio de que cada camada demora 2 minutos a preparar.
lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4
Define 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 adicionaste à lasanha e o parâmetro actual_minutes_in_oven é o número de minutos que a lasanha esteve no forno. A função deve devolver quantos minutos, no total, trabalhaste a cozinhar a lasanha, ou seja, a soma do tempo de preparação em minutos com o tempo, em minutos, que a lasanha esteve no forno até ao momento.
lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Inscreve-te no Exercism para aprenderes e dominares Ruby com 21 conceitos121 exercícios, e mentoria humana real, tudo grátis.