Rutas
/
Ruby
Ruby
/
Ejercicios
/
Parque de atracciones
Parque de atracciones

Parque de atracciones

Ejercicio de aprendizaje

Introducción

Variables de instancia

Los objetos pueden guardar su propio estado definiendo variables de instancia. Estas variables viven dentro de un objeto y normalmente se utilizan para almacenar algún estado interno.

Las variables de instancia siempre empiezan por @. Puedes crear una nueva variable de instancia asignando una variable que empiece por @. Por ejemplo:

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

Normalmente, los objetos establecen su estado inicial en un método initialize, que se llama automáticamente al llamar a new en una clase.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

El método initialize también puede recibir argumentos, de modo que cada instancia pueda empezar con un estado personalizado:

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

Es una buena práctica considerar que las variables de instancia son privadas frente a lecturas y escrituras externas. En su lugar, definimos métodos para obtener y establecer sus valores. Por ejemplo:

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 es una palabra inglesa que significa «nothing» o «zero». En Ruby, nil se utiliza para expresar la ausencia de un objeto. En otros lenguajes de programación, los valores null o none pueden desempeñar un papel similar.

# I do not have a favorite color
favorite_color = nil

Ruby asigna a cualquier variable de instancia el valor predeterminado nil cuando se encuentra por primera vez, hasta que se le asigne otro valor.

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

Instrucciones

Trabajas en un parque de atracciones y te han entregado la especificación de un sistema para gestionar la asistencia y las atracciones. Tu tarea consiste en modelar el Attendee (la persona que visita el parque).

1. Crea nuevos visitantes

Implementa el método Attendee#initialize de la clase Attendee; debe recibir una altura (en centímetros) y almacenarla en una variable de instancia.

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

2. ¿Cuánto mide el visitante?

Implementa el getter Attendee#height de la clase Attendee; debe devolver la altura de la instancia.

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

3. ¿Cuál es el id del pase de atracciones?

No todos los visitantes han comprado un pase de atracciones, pero necesitamos saber si lo tienen o no. Implementa el getter Attendee#pass_id de la clase Attendee; debe devolver el pass_id de la instancia o nil si el visitante no tiene uno.

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

4. Permite que la gente compre un pase

Implementa Attendee#issue_pass! para modificar el estado de la instancia y asignar a la variable de instancia del id del pase el valor del argumento. Debe devolver el id del pase.

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

5. Revoca el pase

Algunos visitantes incumplen las normas con conductas peligrosas, así que el parque quiere poder revocar los pases. Implementa Attendee#revoke_pass! para modificar el estado de la instancia y asignar nil al id del pase.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ruby Exercism

¿Listo para empezar Parque de atracciones?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.