Trilhas
/
Crystal
Crystal
/
Exercícios
/
A lasanha incrível da Ary
A lasanha incrível da Ary

A lasanha incrível da Ary

Exercício de aprendizagem

Introdução

Primeiros passos

Variáveis

Para declarar uma variável, use 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 todas as letras maiúsculas, conhecido como SCREAMING_SNAKE_CASE.

NUMBER = 1
puts NUMBER # => 1

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

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Tipos

O Crystal é uma linguagem compilada, o que significa que toda variável ou argumento de método recebe um tipo em tempo de compilação. O compilador consegue 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 um tipo seja definido serão explicados em conceitos posteriores.

Métodos

Métodos são uma forma de agrupar um conjunto de instruções que podem ser reutilizadas. No Crystal, os métodos costumam ser definidos dentro de uma classe, módulo ou struct. No entanto, métodos também podem ser definidos fora de uma classe, módulo ou estrutura. 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. Você pode omitir os parênteses quando um método não tem nenhum argumento. Para declarar o fim de um método, você deve 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 em um erro de compilação.

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

Argumentos

Os métodos podem ter argumentos. Argumentos são dados passados a um método. Para poder passar argumentos a um método, você precisa 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 devem ser separados por vírgula.

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

Os métodos também podem ter vários argumentos. Nesse caso, os argumentos devem ser separados por vírgula.

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

Chamando métodos

Ao chamar um método que pertence a uma classe, módulo ou struct, você deve usar o operador ponto (.). O formato deve ser: <ClassName>.<method_name>. Quando um método não pertence a uma classe, módulo ou struct, você pode simplesmente chamá-lo escrevendo o nome dele. Os métodos sempre retornam implicitamente o valor da última expressão.

Quando um método tem argumentos, você pode 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, os argumentos devem ser separados por vírgula. Os argumentos devem ser passados na 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 em um 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, você pode usar o operador + para somar dois números. Você também pode usar o operador - para subtrair dois números. E pode usar o operador * para multiplicar dois números.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Comentários

No Crystal, os comentários são escritos com o caractere #, 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, você vai escrever 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 EXPECTED_MINUTES_IN_OVEN na classe Lasagna, que armazena 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 a lasanha ainda precisa ficar no forno, com base no tempo esperado no forno em minutos da tarefa anterior.

Lasagna.new.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 para prepará-la, supondo que cada camada leva 2 minutos para ser preparada.

Lasagna.new.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 já passou no forno. O método deve retornar o número total de minutos que você trabalhou no preparo da lasanha, que é a soma do tempo de preparo em minutos com o tempo que a lasanha passou no forno até o 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 O link abre em uma nova janela ou aba
Crystal Exercism

Tudo pronto para começar A lasanha incrível da Ary?

Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.