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
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
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 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
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
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)
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
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
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.
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
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
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
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
Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.