Trilhas
/
Ruby
Ruby
/
Exercícios
/
Parque de diversões
Parque de diversões

Parque de diversões

Exercício de aprendizagem

Introdução

Variáveis de instância

Objetos podem guardar o próprio estado definindo variáveis de instância. Essas variáveis vivem dentro de um objeto e normalmente são usadas para armazenar algum estado interno.

Variáveis de instância sempre começam com um @. Você pode criar uma nova variável de instância definindo uma variável que comece com @. Por exemplo:

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

Objetos geralmente definem seu estado inicial em um método initialize, que é chamado automaticamente quando você chama new em uma classe.

class Airplane
  def initialize
    @wings = 2
  end

  def wings
    @wings
  end
end

plane = Airplane.new
plane.wings # returns 2

O método initialize também pode receber argumentos, para que cada instância possa começar com um estado personalizado:

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

É uma boa prática considerar as variáveis de instância como privadas, tanto para leitura quanto para escrita externas. Em vez disso, definimos métodos para obter e definir seus valores. Por exemplo:

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 é uma palavra em inglês que significa "nada" ou "zero". Em Ruby, nil é usado para expressar a ausência de um objeto. Em outras linguagens de programação, valores null ou none podem desempenhar um papel parecido.

# I do not have a favorite color
favorite_color = nil

Ruby dá a qualquer variável de instância o valor padrão nil quando ela é encontrada pela primeira vez, até que receba outro valor.

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

Instruções

Trabalhando em um parque de diversões, você recebeu uma especificação para projetar um sistema que controle a entrada de visitantes e os brinquedos. Você ficou responsável por modelar o Attendee (a pessoa que visita o parque).

1. Criar novos visitantes

Implemente o método Attendee#initialize da classe Attendee. Ele deve receber uma altura (em centímetros) e armazená-la como uma variável de instância.

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

2. Qual é a altura do visitante?

Implemente o getter Attendee#height da classe Attendee. Ele deve retornar a altura da instância.

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

3. Qual é o id do passe de brinquedos?

Nem todos os visitantes compraram um passe de brinquedos, mas precisamos saber se eles têm um passe ou não. Implemente o getter Attendee#pass_id da classe Attendee. Ele deve retornar o pass_id da instância ou nil se o visitante não tiver um.

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

4. Permitir que as pessoas comprem um passe

Implemente Attendee#issue_pass! para alterar o estado da instância e definir a variável de instância pass_id com o argumento. Ele deve retornar o id do passe.

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

5. Revogar o passe

Alguns visitantes desrespeitam as regras com comportamento inseguro, por isso o parque quer poder revogar passes. Implemente Attendee#revoke_pass! para alterar o estado da instância e definir o id do passe como nil.

attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Parque de diversões?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.