Lasagnes

Lasagnes

Exercice d'apprentissage

Introduction

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.

Variables et constantes

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"

Classes

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

Méthodes

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)

Instructions

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.

1. Définis le temps de cuisson attendu en minutes

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

2. Calcule le temps de cuisson restant en minutes

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

3. Calcule le temps de préparation en minutes

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

4. Calcule le temps de travail total en minutes

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
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Lasagnes ?

Inscris-toi sur Exercism pour apprendre et maîtriser Ruby avec 21 concepts121 exercices, et un vrai mentorat humain, le tout gratuitement.