private method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 17 dari 57.
Enkapsulasi berarti sebuah object menyembunyikan cara kerjanya dan menyediakan sekumpulan kecil method publik. Secara default, method bersifat publik. Setiap method yang didefinisikan setelah kata private di dalam isi class bersifat privat: method milik object itu sendiri dapat memanggilnya, tetapi kode dari luar tidak bisa:
class Order
def initialize(price, quantity)
@price = price
@quantity = quantity
end
def total
subtotal + shipping
end
private
def subtotal
@price * @quantity
end
def shipping
subtotal >= 50 ? 0 : 5
end
end
order = Order.new(10, 3)
puts order.total
begin
order.subtotal
rescue NoMethodError => e
puts e.message
endOutput:
35
private method `subtotal' called for an instance of OrderDi dalam class, private method dipanggil tanpa receiver atau dengan self.. Memanggilnya pada object lain, meskipun object tersebut berasal dari class yang sama, akan ditolak:
class Coin
def initialize(cents)
@cents = cents
end
def describe
"#{self.label} / #{label}"
end
def same_as?(other)
other.label == label
end
private
def label
"#{@cents}c"
end
end
a = Coin.new(5)
puts a.describe
begin
a.same_as?(Coin.new(5))
rescue NoMethodError => e
puts e.message
endOutput:
5c / 5c
private method `label' called for an instance of Coinprivate juga dapat menerima nama method, dan def mengembalikan nama method tersebut, sehingga private def helper menjadikan satu method private tepat di tempat method itu didefinisikan. Method-method di atas dan di sekitarnya tetap public:
class Greeter
def greet(name)
"#{salutation}, #{name}!"
end
private def salutation
"Hello"
end
def wave
"*waves*"
end
end
g = Greeter.new
puts g.greet("Ada")
puts g.wave
p Greeter.private_instance_methods(false)Output:
Hello, Ada!
*waves*
[:salutation]Jaga helper tetap private. method publik adalah janji yang dibuat class kepada bagian lain dari program; method private dapat diganti nama atau dihapus nanti tanpa merusak pemanggil mana pun:
class Invoice
def total # public: pemanggil bergantung padanya
net + tax
end
private # boleh diubah nanti
def net
...
end
def tax
...
end
endTantangan
MudahLengkapi class Order. Satu-satunya method publiknya selain initialize adalah receipt, yang mengembalikan 3 x 12.50 = 37.50, tax 7.50, total 45.00. Method privat subtotal (harga dikali jumlah), tax (20% dari subtotal), dan total menghitung angka-angka tersebut.
Kode yang disediakan membaca pesanan dalam baris quantity price dan mencetak setiap tanda terima. Lalu kode tersebut mencoba memanggil tax dari luar dan mencetak tax is private saat Ruby menolak.
Tulis kodemu di order.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'order'
# Kode input/output yang disediakan: biarkan tetap seperti ini
input = []
while (line = gets)
input << line.chomp
end
orders = input.map do |line|
quantity, price = line.split
Order.new(quantity.to_i, price.to_f)
end
orders.each { |o| puts o.receipt }
begin
orders[0].tax
puts "tax is public"
rescue NoMethodError
puts "tax is private"
end
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online