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
-
attr_reader
Accessor ini membangkitkan metode getter untuk item yang diberikan.
-
attr_writer
Accessor ini membangkitkan metode setter untuk item yang diberikan
-
attr_accessor
Accessor ini membangkitkan metode getter dan setter sekaligus untuk item yang diberikan.
# 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
.
# 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.
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
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