Pour déclarer une variable, utilise l'opérateur d'affectation =.
En Crystal, les variables doivent utiliser le format snake_case.
number = 1
puts number # => 1
number = 2
puts number # => 2
Les constantes se déclarent avec le même opérateur d'affectation =, mais s'écrivent entièrement en majuscules, ce que l'on appelle le SCREAMING_SNAKE_CASE.
NUMBER = 1
puts NUMBER # => 1
Affecter une valeur à une constante déjà définie provoque une erreur à la compilation.
NUMBER = 1
NUMBER = 2
# Error: already initialized constant NUMBER
Crystal est un langage compilé, ce qui signifie que chaque variable ou argument de méthode se voit attribuer un type au moment de la compilation. Le compilateur sait déduire le type d'une variable ou d'un argument de méthode. Cependant, dans certains cas, il est nécessaire de préciser le type. Les cas qui nécessitent de préciser un type seront expliqués dans les prochains concepts.
Les méthodes permettent de regrouper un ensemble d'instructions qui peuvent être réutilisées.
En Crystal, les méthodes sont souvent définies dans une classe, un module ou une structure.
Cependant, on peut aussi définir des méthodes en dehors d'une classe, d'un module ou d'une structure.
Les méthodes se déclarent avec le mot-clé def, suivi du nom de la méthode.
En Crystal, les méthodes s'écrivent en snake_case.
On peut omettre les parenthèses quand une méthode ne prend aucun argument.
Pour marquer la fin d'une méthode, il faut utiliser le mot-clé end.
def hello
puts "Hello World!"
end
Utiliser une méthode qui n'existe pas pour le type d'une variable ou d'un argument de méthode provoque une erreur à la compilation.
number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String
Les méthodes peuvent prendre des arguments. Les arguments sont les données que l'on passe à une méthode. Pour donner des arguments à une méthode, il faut préciser le nom de l'argument. En Crystal, les arguments s'écrivent en snake_case. Une méthode peut prendre plusieurs arguments, mais ils doivent être séparés par une virgule.
def hello(name)
puts "Hello #{name}!"
end
Les méthodes peuvent aussi prendre plusieurs arguments. Dans ce cas, les arguments doivent être séparés par une virgule.
def hello(name, language)
puts "Hello #{name}! You are learning #{language}."
end
Quand on appelle une méthode qui appartient à une classe, un module ou une structure, il faut utiliser l'opérateur point (.).
Le format est le suivant : <ClassName>.<method_name>.
Quand une méthode n'appartient pas à une classe, à un module ou à une structure, on peut simplement l'appeler en écrivant son nom.
Les méthodes renvoient toujours implicitement la valeur de la dernière expression.
Quand une méthode prend des arguments, on peut utiliser des parenthèses pour préciser les arguments lors de l'appel et de la définition de la méthode, comme ceci : <method_name>(<argument_1>, <argument_2>, ...).
Quand une méthode ne prend aucun argument, les parenthèses doivent être omises.
def hello(name)
"Hello #{name}!"
end
hello("Crystal")
# => Hello Crystal!
Quand on appelle une méthode avec plusieurs arguments, ceux-ci doivent être séparés par une virgule. Les arguments doivent être donnés dans le même ordre que les arguments de la méthode.
def hello_language(name, language)
"Hello #{name}! You are learning #{language}."
end
hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.
Appeler une méthode avec un nombre incorrect d'arguments provoque une erreur à la compilation.
hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)
En Crystal, on peut utiliser l'opérateur + pour additionner deux nombres.
On peut aussi utiliser l'opérateur - pour soustraire deux nombres.
Et on peut utiliser l'opérateur * pour multiplier deux nombres.
1 + 1
# => 2
2 - 1
# => 1
2 * 2
# => 4
En Crystal, les commentaires s'écrivent avec le caractère #, suivi d'un espace puis du commentaire.
Les commentaires servent à documenter le code.
Le compilateur n'exécute pas les commentaires.
# This is a comment
Dans cet exercice, tu vas écrire du code pour t'aider à préparer une excellente lasagne tirée de ton livre de recettes préféré.
Tu as quatre tâches, toutes liées au temps passé à cuisiner la lasagne.
Définis la constante EXPECTED_MINUTES_IN_OVEN dans la classe Lasagna, qui stocke le nombre de minutes que la lasagne doit passer au four.
D'après le livre de cuisine, le temps de cuisson attendu est de 40 minutes :
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Définis la méthode Lasagna#remaining_minutes_in_oven qui prend en paramètre le nombre de minutes que la lasagne a déjà passées au four et renvoie le nombre de minutes que la lasagne doit encore rester au four, d'après le temps de cuisson attendu de la tâche précédente.
Lasagna.new.remaining_minutes_in_oven(30)
# => 10
Définis la méthode Lasagna#preparation_time_in_minutes, qui prend en paramètre le nombre de couches que tu as ajoutées à la lasagne et renvoie le nombre de minutes que tu as passées à la préparer, en supposant que chaque couche demande 2 minutes de préparation.
Lasagna.new.preparation_time_in_minutes(2)
# => 4
Définis la méthode Lasagna#total_time_in_minutes qui prend deux paramètres nommés : le paramètre number_of_layers est le nombre de couches que tu as ajoutées à la lasagne, et le paramètre actual_minutes_in_oven est le nombre de minutes que la lasagne a passées au four.
La méthode doit renvoyer le nombre total de minutes que tu as consacrées à la préparation de la lasagne, c'est-à-dire la somme du temps de préparation en minutes et du temps que la lasagne a passé au four jusqu'à présent.
number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Inscris-toi sur Exercism pour apprendre et maîtriser Crystal avec 26 concepts142 exercices, et un vrai mentorat humain, le tout gratuitement.