Menu
CoddyTech

Variabel instans

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 3 dari 57.

Variabel instance diawali dengan @ dan dimiliki oleh satu object. Nilai yang disimpan di initialize tetap tersedia untuk setiap method dari object tersebut, dan setiap instance memiliki salinannya sendiri:

class Dog
  def initialize(name)
    @name = name
  end

  def speak
    "#{@name} says Woof"
  end
end

rex = Dog.new("Rex")
bella = Dog.new("Bella")
puts rex.speak
puts bella.speak

Output:

Rex says Woof
Bella says Woof

Method dapat mengubah variabel instance, sehingga sebuah object mengingat apa yang terjadi padanya. Secara keseluruhan, variabel instance-nya adalah state object tersebut:

class Counter
  def initialize
    @count = 0
  end

  def increment
    @count += 1
  end

  def report
    "count is #{@count}"
  end
end

clicks = Counter.new
clicks.increment
clicks.increment
puts clicks.report

Output:

count is 2

Variabel instance tidak dapat diakses dari luar object. Kode dari luar hanya dapat memanggil method, jadi class yang ingin membagikan nilai mendefinisikan method yang mengembalikannya, yaitu reader:

class Dog
  def initialize(name)
    @name = name
  end

  def name
    @name
  end
end

rex = Dog.new("Rex")
puts rex.name
begin
  rex.age
rescue NoMethodError => e
  puts e.message
end

Output:

Rex
undefined method `age' for an instance of Dog

Variabel instance yang tidak pernah diberi nilai adalah nil dan tidak menimbulkan error, jadi nama yang salah ketik secara diam-diam membaca variabel lain yang kosong. instance_variables mencantumkan variabel yang benar-benar dimiliki sebuah object:

class Lamp
  def initialize
    @on = false
  end

  def status
    @onn.inspect
  end
end

lamp = Lamp.new
puts lamp.status
p lamp.instance_variables

Output:

nil
[:@on]
challenge icon

Tantangan

Mudah

Lengkapi class Pet. initialize(name, species, age) menyimpan ketiga nilai, birthday menambahkan satu tahun pada usia, dan describe mengembalikan satu kalimat: hewan peliharaan bernama Rex, spesies dog, berusia 3 menghasilkan Rex is a 3 year old dog.

Code yang disediakan membuat Pet dari tiga baris input pertama (nama, spesies, usia), memanggil birthday sebanyak yang ditentukan baris keempat, lalu mencetak describe.

Tulis kodemu di pet.rb. main.rb berisi code input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

require_relative 'pet'

# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
  input << line.chomp
end
pet = Pet.new(input[0], input[1], input[2].to_i)
input[3].to_i.times { pet.birthday }
puts pet.describe
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online