Track
/
Ruby
Ruby
/
Esercizi
/
Parco divertimenti
Parco divertimenti

Parco divertimenti

Esercizio di apprendimento

Introduzione

Variabili di istanza

Gli oggetti possono mantenere il proprio stato impostando delle variabili di istanza. Queste variabili vivono all'interno di un oggetto e normalmente servono a memorizzare uno stato interno.

Le variabili di istanza iniziano sempre con una @. Puoi creare una nuova variabile di istanza assegnando una variabile che inizia con una @. Per esempio:

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!"

Di solito gli oggetti impostano il proprio stato iniziale in un metodo initialize, che viene chiamato automaticamente quando si chiama new su una classe.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

Il metodo initialize può anche accettare argomenti, così che ogni istanza possa partire con uno stato personalizzato:

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

È buona pratica considerare le variabili di istanza come private rispetto a letture e scritture esterne. Al loro posto, definiamo dei metodi per leggerne e impostarne i valori. Per esempio:

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 è una parola inglese che significa «niente» o «zero». In Ruby, nil viene usato per esprimere l'assenza di un oggetto. In altri linguaggi di programmazione, valori come null o none possono svolgere un ruolo simile.

# I do not have a favorite color
favorite_color = nil

Ruby assegna a qualsiasi variabile di istanza il valore predefinito nil quando viene incontrata per la prima volta, finché non le viene assegnato un valore diverso.

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

Istruzioni

Lavorando con un parco divertimenti, ti è stata consegnata una specifica per progettare un sistema che gestisca le presenze e le giostre. Il tuo compito è modellare l'Attendee (la persona che visita il parco).

1. Crea nuovi Attendee

Implementa il metodo Attendee#initialize della classe Attendee: deve accettare un'altezza (in centimetri) e memorizzarla in una variabile di istanza

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

2. Quanto è alto l'Attendee

Implementa il getter Attendee#height della classe Attendee: deve restituire l'altezza dell'istanza

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

3. Qual è l'id del pass per le giostre

Non tutti gli Attendee hanno acquistato un pass per le giostre, ma dobbiamo sapere se ne hanno uno o no. Implementa il getter Attendee#pass_id della classe Attendee: deve restituire il pass_id dell'istanza, oppure nil se l'Attendee non ne ha uno.

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

4. Consenti alle persone di acquistare un pass

Implementa Attendee#issue_pass! per mutare lo stato dell'istanza ed impostare la variabile di istanza del pass id all'argomento. Deve restituire il pass id.

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

5. Revoca il pass

Alcuni ospiti infrangono le regole con comportamenti pericolosi, quindi il parco vuole poter revocare i pass. Implementa Attendee#revoke_pass! per mutare lo stato dell'istanza ed impostare il pass id su nil

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Parco divertimenti?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.