Parcours
/
Ruby
Ruby
/
Exercices
/
Parc d'attractions
Parc d'attractions

Parc d'attractions

Exercice d'apprentissage

Introduction

Variables d'instance

Les objets peuvent conserver leur propre état en définissant des variables d'instance. Ces variables vivent à l'intérieur d'un objet et servent normalement à stocker un état interne.

Les variables d'instance commencent toujours par un @. On peut créer une nouvelle variable d'instance en affectant une variable qui commence par un @. Par exemple :

class Repeater
  def hear(something)
    # Save what's been heard into a new instance variable called @heard
    @heard = something
  end

  def repeat
    # Return the value of the instance variable
    @heard
  end
end

repeater = Repeater.new
repeater.hear("Hello, friend!")
print repeater.repeat # Prints "Hello, friend!"

Les objets définissent généralement leur état initial dans une méthode initialize, qui est automatiquement appelée lorsqu'on appelle new sur une classe.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

La méthode initialize peut aussi prendre des arguments, afin que chaque instance puisse démarrer avec un état personnalisé :

class Suitcase
  def initialize(locked)
    @locked = locked
  end
end

C'est une bonne pratique de considérer les variables d'instance comme privées vis-à-vis des lectures et des écritures externes. On définit plutôt des méthodes pour lire et écrire leurs valeurs. Par exemple :

class Suitcase
  def initialize
    @locked = false
  end

  def locked? # Query methods should be named with a trailing `?`
    @locked
  end

  def lock! # Methods which mutate state should have trailing `!`
    @locked = true
  end
end

suitcase = Suitcase.new
suitcase.locked? # false
suitcase.lock!
suitcase.locked? # true

Nil

Nil est un mot anglais qui signifie « rien » ou « zéro ». En Ruby, nil sert à exprimer l'absence d'un objet. Dans d'autres langages de programmation, les valeurs null ou none peuvent jouer un rôle similaire.

# I do not have a favorite color
favorite_color = nil

Ruby donne à toute variable d'instance la valeur par défaut nil lors de sa première utilisation, jusqu'à ce qu'une valeur lui soit affectée.

print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"

Instructions

Tu travailles pour un parc d'attractions et on t'a confié un cahier des charges pour concevoir un système qui gère la fréquentation et les attractions. Ta mission consiste à modéliser l'Attendee (la personne qui visite le parc).

1. Crée de nouveaux visiteurs

Implémente la méthode Attendee#initialize de la classe Attendee : elle prend une taille (en centimètres) et la stocke dans une variable d'instance.

Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>

2. Quelle est la taille du visiteur

Implémente le getter Attendee#height de la classe Attendee : il renvoie la taille de l'instance.

Attendee.new(106).height
# => 106

3. Quel est l'identifiant du pass d'attractions

Tous les visiteurs n'ont pas acheté de pass, mais on doit savoir s'ils en ont un ou non. Implémente le getter Attendee#pass_id de la classe Attendee : il doit renvoyer l'identifiant du pass de l'instance, ou nil si le visiteur n'en a pas.

Attendee.new(106).pass_id
# => nil

4. Permets aux visiteurs d'acheter un pass

Implémente Attendee#issue_pass! pour modifier l'état de l'instance et affecter l'argument à la variable d'instance de l'identifiant du pass. Elle doit renvoyer l'identifiant du pass.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42

5. Révoque le pass

Certains visiteurs enfreignent les règles avec un comportement dangereux, c'est pourquoi le parc veut pouvoir révoquer des pass. Implémente Attendee#revoke_pass! pour modifier l'état de l'instance et mettre l'identifiant du pass à nil.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Ruby Exercism

Prêt à commencer Parc d'attractions ?

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