Tracks
/
Ruby
Ruby
/
Ejercicios
/
Parque de diversiones
Parque de diversiones

Parque de diversiones

Ejercicio de aprendizaje

Introducción

Variables de instancia

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

Las variables de instancia siempre empiezan con un @. Puedes crear una nueva variable de instancia al asignar una variable que empiece con @. 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!"

Por lo general, los objetos establecen su estado inicial en un método initialize, el cual se llama automáticamente cuando llamas 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, para que cada instancia pueda empezar con un estado personalizado:

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

Es una buena práctica considerar las variables de instancia como 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 en inglés que significa «nada» o «cero». En Ruby, nil se usa para expresar la ausencia de un objeto. En otros lenguajes de programación, los valores null o none pueden cumplir un papel similar.

# I do not have a favorite color
favorite_color = nil

Ruby le da a cualquier variable de instancia el valor predeterminado de 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 diversiones y te entregaron una especificación para diseñar un sistema que administre la asistencia y las atracciones. Tu tarea es modelar al visitante (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 guardarla en una variable de instancia.

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

2. ¿Qué altura tiene 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 tienen uno 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 las personas compren un pase

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

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

5. Revoca el pase

Algunos visitantes rompen las reglas 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 pass id.

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 una pestaña nuevas
Ruby Exercism

¿Todo listo para empezar Parque de diversiones?

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