A Ruby class defines how new objects are initialized and what instance methods they can run.

class A class is a blueprint for objects that carry data and behavior together.

Class Basics

name
class_basics.rb
Replay: real traced execution (multi-file project)
class Ticket
  def initialize(name)
    @name = name
  end

  def label
    "Ticket for #{@name}"
  end
end

name = "Ruby"
ticket = Ticket.new(name)

puts ticket.label
class Ticket
  def initialize(name)
    @name = name
  end

  def label
    "Ticket for #{@name}"
  end
end

name = "Ada"
ticket = Ticket.new(name)

puts ticket.label
class Ticket
  def initialize(name)
    @name = name
  end

  def label
    "Ticket for #{@name}"
  end
end

name = "Matz"
ticket = Ticket.new(name)

puts ticket.label
  1. name ← Ruby

    11name→ Ruby = "Ruby"  #@name="Ada", "Matz"12ticket = Ticket.new(nameRuby)
  2. @name ← Ruby

    1class Ticket2  def initialize(nameRuby)3    @name→ Ruby = nameRuby4  end
  3. ticket ← ⟨Ticket A @name="Ruby"⟩

    11name = "Ruby"  #@name="Ada", "Matz"12ticket→ ⟨Ticket A @name="Ruby"⟩ = Ticket.new(nameRuby)1314puts ticket.labelTicket for Ruby
  4. def label

    6def label7  "Ticket for #{@nameRuby}"8end
  5. puts ticket.label

    14puts ticket.labelTicket for Ruby
    outputTicket for Ruby
  1. name ← Ada

    11name→ Ada = "Ada"12ticket = Ticket.new(nameAda)
  2. @name ← Ada

    1class Ticket2  def initialize(nameAda)3    @name→ Ada = nameAda4  end
  3. ticket ← ⟨Ticket A @name="Ada"⟩

    11name = "Ada"12ticket→ ⟨Ticket A @name="Ada"⟩ = Ticket.new(nameAda)1314puts ticket.labelTicket for Ada
  4. def label

    6def label7  "Ticket for #{@nameAda}"8end
  5. puts ticket.label

    14puts ticket.labelTicket for Ada
    outputTicket for Ada
  1. name ← Matz

    11name→ Matz = "Matz"12ticket = Ticket.new(nameMatz)
  2. @name ← Matz

    1class Ticket2  def initialize(nameMatz)3    @name→ Matz = nameMatz4  end
  3. ticket ← ⟨Ticket A @name="Matz"⟩

    11name = "Matz"12ticket→ ⟨Ticket A @name="Matz"⟩ = Ticket.new(nameMatz)1314puts ticket.labelTicket for Matz
  4. def label

    6def label7  "Ticket for #{@nameMatz}"8end
  5. puts ticket.label

    14puts ticket.labelTicket for Matz
    outputTicket for Matz

Follow the Object

  1. name starts as Ruby.
  2. Ticket.new(name) creates one Ticket object.
  3. initialize stores Ruby in @name.
  4. ticket.label reads that instance variable.
  5. The program prints Ticket for Ruby. | step | value | | --- | --- | | constructor input | Ruby | | stored @name | Ruby | | label result | Ticket for Ruby |

Exercise: class_basics.rb

Reproduce Ticket for Ruby, then use the pinned name variants Ada and Matz to predict Ticket for Ada and Ticket for Matz.