Cet exercice va t'apprendre les fondements de Ruby. Il couvre beaucoup de choses, mais ne t'inquiète pas s'il te semble dense : nous reviendrons sur chaque point bien plus en détail au fil du parcours.
L'une des choses essentielles à comprendre à propos de Ruby, c'est qu'il s'agit d'un langage orienté objet et que tout, en Ruby, est un objet. Les nombres, les strings, les tableaux : ce sont tous des objets.
On a l'habitude d'utiliser les objets en leur donnant un nom, que ce soit avec des variables ou des constantes.
Les variables s'écrivent toujours en snake_case.
Au cours de sa vie, une variable peut faire référence à différents objets.
Par exemple, my_first_variable peut être définie et redéfinie autant de fois que nécessaire avec l'opérateur = :
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
Les constantes, en revanche, sont censées n'être affectées qu'une seule fois. Elles doivent commencer par une majuscule et s'écrivent normalement en majuscules, les mots étant séparés par des tirets bas. Par exemple :
MY_FIRST_CONSTANT = 10
# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"
Ruby est organisé en classes.
Les classes se définissent avec le mot-clé class, suivi du nom de la classe.
Les objets sont généralement créés en instanciant des classes avec la méthode .new.
Par exemple :
# Define the class
class Calculator
#...
end
# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new
Les unités de fonctionnalité sont encapsulées dans des méthodes, un peu comme les fonctions dans d'autres langages.
Une méthode peut être définie avec des arguments positionnels, des arguments nommés (que l'on définit et appelle avec la syntaxe :) ou sans aucun argument.
Une méthode renvoie implicitement le résultat de la dernière instruction évaluée, ou peut renvoyer explicitement un objet avec le mot-clé 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
Les méthodes s'appellent avec la syntaxe . :
calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)
Dans cet exercice, tu vas écrire du code pour t'aider à préparer de délicieuses lasagnes à partir de ton livre de cuisine préféré.
Tu as quatre tâches, toutes liées au temps passé à cuisiner les lasagnes.
Définis la constante Lasagna::EXPECTED_MINUTES_IN_OVEN qui renvoie le nombre de minutes pendant lesquelles les lasagnes doivent rester 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 les lasagnes ont déjà passées au four et qui renvoie le nombre de minutes qu'il leur reste à cuire, d'après le temps de cuisson attendu de la tâche précédente.
lasagna = Lasagna.new
lasagna.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 aux lasagnes et qui renvoie le nombre de minutes que tu as passées à les préparer, en supposant que chaque couche te prenne 2 minutes à préparer.
lasagna = Lasagna.new
lasagna.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 aux lasagnes, et le paramètre actual_minutes_in_oven est le nombre de minutes que les lasagnes ont passées au four. La fonction doit renvoyer le nombre total de minutes que tu as consacrées à la préparation des lasagnes, c'est-à-dire la somme du temps de préparation en minutes et du temps, en minutes, que les lasagnes ont passé au four jusqu'à maintenant.
lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.