Skip to content

Instantly share code, notes, and snippets.

@wowothk
Created May 7, 2020 05:34
Show Gist options
  • Save wowothk/cf113cc53d291f0c83670d0b95d21619 to your computer and use it in GitHub Desktop.
Save wowothk/cf113cc53d291f0c83670d0b95d21619 to your computer and use it in GitHub Desktop.
Sedikit penjelasan tentang metode getter setter di ruby.

Ruby Getters and Setters Method

Dalam kelas Ruby kita mungkin ingin mengekspos variabel instan (variabel yang didefinisikan diawali oleh simbol @) ke kelas lain untuk enkapsulasi. Kemudian, dalam hal ini, kami menggunakan metode getter dan setter. metode ini memungkinkan kita untuk mengakses variabel instance kelas dari luar kelas. Metode getter digunakan untuk mendapatkan nilai variabel instan, sedangkan metode setter digunakan untuk mengatur nilai variabel instan dari beberapa kelas.

Dalam hal ini diberikan contoh sederhana penggunaan metode get

# Ruby Program of getter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website) 
    @website = website 
  end
  
  # Classical get method 
  def website 
    @website
  end
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org"
puts gfg.website 

Output

www.geeksforgeeks.org

Pada contoh di atas jika kita tidak mendefinisikan method website maka program tersebut (gfg.website) akan error karena variabel @website merupakan varianel instan yang mana secara default tidak dapat diakses di luar kelasnya.

Selanjutnya diberikan metode set sederhana sebagai berikut.

# Ruby Program of setter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website) 
    @website = website 
  end
  
  # Classical get method 
  def website 
    @website
  end
  
  # Classical set method 
  def website=(website) 
    @website = website 
  end
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org"
puts gfg.website 
  
# Change the instance variable from 
# Outside the class 
gfg.website="www.practice.geeksforgeeks.org"
puts gfg.website 

Output

www.geeksforgeeks.org
www.practice.geeksforgeeks.org

Pada contoh tersebut jika kita tidak mendefinisikan method website= maka kita tidak dapat mengubah nilai dari variabel instan.


Dalam hal ini Ruby menyediakan jalan tercepat untuk membangkitkan metode getter dan setter, tanpa harus menuliskannya sebagaimana pada script-script program di atas. Metodenya dikenal dengan metode accessor. Tujuannya sama yaitu untuk getter atau setter.

Terdapat tiga jenis accessor di Ruby, yaitu

  1. attr_reader

    Accessor ini membangkitkan metode getter untuk item yang diberikan.

  2. attr_writer

    Accessor ini membangkitkan metode setter untuk item yang diberikan

  3. attr_accessor

    Accessor ini membangkitkan metode getter dan setter sekaligus untuk item yang diberikan.

attr_reader

# Ruby Program of accessor getter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website) 
    @website = website 
  end
  
  # accessor get method 
  attr_reader :website
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org"
puts gfg.website 

Output

www.geeksforgeeks.org

Dalam hal ini nampak bahwasanya getter telah digantikan dengan attr_reader :website.

attr_writer

# Ruby Program of accessor getter and setter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website) 
    @website = website 
  end
  
  # accessor get method 
  attr_reader :website
  
  # accessor set method 
  attr_writer :website
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org"
puts gfg.website 
  
# Change the instance variable from 
# Outside the class 
gfg.website="www.practice.geeksforgeeks.org"
puts gfg.website 

Ouput

www.geeksforgeeks.org
www.practice.geeksforgeeks.org

Dalam hal ini pertama dipanggil metode getter untuk kemudian metode setter sehingga nampak bahwasanya outputnya berbeda.

attr_accessor

Ini akan sama dengan script program sebelumnya, namun dengan cara yang lebih sederhana, yaitu dengan attr_accessor.

# Ruby Program of accessor getter and setter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website) 
    @website = website 
  end
  
  # accessor get and set method 
  attr_accessor :website
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org"
puts gfg.website 
  
# Change the instance variable from 
# Outside the class 
gfg.website="www.practice.geeksforgeeks.org"
puts gfg.website

Output

www.geeksforgeeks.org
www.practice.geeksforgeeks.org

MISC

Sebuah kelas mungkin memiliki banyak variabel instan, berdasarkan pada itu kita mungkin ingin memiliki izin akses yang berbeda dari variabel instan tersebut ke kelas lain. Di sini, kita melihat penggunaan campuran dari pengakses di kelas.

# Ruby Program of accessor getter and setter method 
class CSWebsite 
  
  # Constructor to initialize 
  # the class with a name 
  # instance variable 
  def initialize(website, id) 
    @website = website 
    @id = id 
  end
  
  # accessor get and set method 
  attr_accessor :website
  attr_reader :id
end
  
# Creating an object of the class 
gfg = CSWebsite.new "www.geeksforgeeks.org", 12
puts gfg.website 
puts gfg.id 

Output

www.geeksforgeeks.org
12

Pada script di atas variabel instan id hanya bisa di-get belaka, sehingga apabila di-set misalnya gfg.id=lalala pasti akan error.


Diterjemahkan dari geeksforgeeks.com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment