Percursos
/
Crystal
Crystal
/
Exercícios
/
A Lasanha Fantástica da Ary
A Lasanha Fantástica da Ary

A Lasanha Fantástica da Ary

Exercício de aprendizagem

Introdução

Primeiros passos

Variáveis

Para declarar uma variável, usa o operador de atribuição =. No Crystal, as variáveis devem usar o formato snake_case.

number = 1
puts number # => 1

number = 2
puts number # => 2

Constantes

As constantes são declaradas com o mesmo operador de atribuição =, mas usam apenas letras maiúsculas, o que é conhecido como SCREAMING_SNAKE_CASE.

NUMBER = 1
puts NUMBER # => 1

Atribuir um valor a uma constante já definida resulta num erro de compilação.

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Tipos

O Crystal é uma linguagem compilada, o que significa que a cada variável ou argumento de método é atribuído um tipo em tempo de compilação. O compilador é capaz de inferir o tipo de uma variável ou de um argumento de método. No entanto, em alguns casos é necessário especificar o tipo. Os casos que exigem que o tipo seja especificado serão explicados em conceitos posteriores.

Métodos

Os métodos são uma forma de agrupar um conjunto de instruções que podem ser reutilizadas. No Crystal, os métodos são muitas vezes definidos numa classe, num módulo ou num struct. No entanto, também é possível definir métodos fora de uma classe, de um módulo ou de um struct. Os métodos são declarados com a palavra-chave def, seguida do nome do método. No Crystal, os métodos devem ser escritos em snake_case. Podes omitir os parênteses quando um método não tem argumentos. Para marcar o fim de um método, tens de usar a palavra-chave end.

def hello
  puts "Hello World!"
end

Usar um método que não existe para o tipo da variável ou do argumento de método resulta num erro de compilação.

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

Argumentos

Os métodos podem ter argumentos. Os argumentos são dados que são passados a um método. Para poderes dar argumentos a um método, tens de especificar o nome do argumento. No Crystal, os argumentos devem ser escritos em snake_case. Um método pode ter vários argumentos, mas os argumentos têm de ser separados por uma vírgula.

def hello(name)
  puts "Hello #{name}!"
end

Os métodos também podem ter vários argumentos. Neste caso, os argumentos têm de ser separados por uma vírgula.

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

Chamar métodos

Quando chamas um método que pertence a uma classe, a um módulo ou a um struct, tens de usar o operador ponto (.). O formato deve ser: <ClassName>.<method_name>. Quando um método não pertence a uma classe, a um módulo ou a um struct, basta chamá-lo escrevendo o seu nome. Os métodos devolvem sempre implicitamente o valor da última expressão.

Quando um método tem argumentos, podes usar parênteses ao especificar os argumentos na chamada e na definição do método, assim: <method_name>(<argument_1>, <argument_2>, ...). Quando um método não tem argumentos, os parênteses devem ser omitidos.

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

Ao chamar um método com vários argumentos, estes devem ser separados por uma vírgula. Os argumentos têm de ser indicados pela mesma ordem dos argumentos do método.

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

Chamar um método com o número errado de argumentos resulta num erro de compilação.

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

Adição, subtração e multiplicação

No Crystal, podes usar o operador + para somar dois números. Também podes usar o operador - para subtrair dois números. E podes usar o operador * para multiplicar dois números.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Comentários

No Crystal, os comentários escrevem-se com o caráter #, seguido de um espaço e depois o comentário. Os comentários servem para documentar o código. O compilador não executa os comentários.

# This is a comment

Instruções

Neste exercício, vais escrever código para te ajudar a cozinhar uma lasanha fantástica do teu livro de receitas favorito.

Tens quatro tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.

1. Define o tempo esperado no forno, em minutos

Define a constante EXPECTED_MINUTES_IN_OVEN na classe Lasagna, que guarda quantos minutos a lasanha deve estar no forno. De acordo com o livro de receitas, o tempo esperado no forno é de 40 minutos:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. Calcula o tempo restante no forno, em minutos

Define o método Lasagna#remaining_minutes_in_oven, que recebe como parâmetro os minutos reais 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 da tarefa anterior.

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

3. Calcula o tempo de preparação, em minutos

Define o método Lasagna#preparation_time_in_minutes, que recebe como parâmetro o número de camadas que adicionaste à lasanha e devolve o número de minutos que gastaste a prepará-la, assumindo que cada camada demora 2 minutos a preparar.

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

4. Calcula o tempo total de trabalho, em minutos

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. O método deve devolver o número total de minutos que trabalhaste a cozinhar a lasanha, que é a soma do tempo de preparação, em minutos, com o tempo que a lasanha passou no forno até ao momento.

number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Editar via GitHub A ligação abre numa nova janela ou separador
Crystal Exercism

Estás pronto para começar A Lasanha Fantástica da Ary?

Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.