method dan self
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 4 dari 57.
Sebuah method dapat memanggil method lain dari object yang sama tanpa menulis penerima. Ruby mengirim pemanggilan tersebut ke object saat ini, sehingga method saling membangun:
class Order
def initialize(price, quantity)
@price = price
@quantity = quantity
end
def subtotal
@price * @quantity
end
def shipping
subtotal >= 50 ? 0 : 5
end
def total
subtotal + shipping
end
end
puts Order.new(10, 3).total
puts Order.new(20, 3).totalOutput:
35
60Di dalam method, self adalah object tempat method tersebut dipanggil. Method yang mengembalikan self memungkinkan pemanggil merangkai beberapa pemanggilan pada object yang sama:
class Counter
def initialize
@count = 0
end
def add(n)
@count += n
self
end
def count
@count
end
end
puts Counter.new.add(2).add(5).countOutput:
7Sebuah object juga dapat menyerahkan dirinya sendiri kepada kode lain dengan self, misalnya untuk mengembalikan pemenang perbandingan dengan object lain dari class yang sama:
class Player
def initialize(name, score)
@name = name
@score = score
end
def name
@name
end
def score
@score
end
def winner_against(other)
score >= other.score ? self : other
end
end
ada = Player.new("Ada", 9)
bo = Player.new("Bo", 7)
puts ada.winner_against(bo).name
puts bo.winner_against(ada).nameOutput:
Ada
AdaNama method yang menjawab pertanyaan ya atau tidak diakhiri dengan ?, seperti empty?. Parameter dapat memiliki nilai default, yang digunakan saat pemanggil tidak menyertakan argumen:
class Kettle
def initialize
@temp = 20
end
def hot?
@temp >= 90
end
def heat(degrees = 10)
@temp = [@temp + degrees, 100].min
end
end
k = Kettle.new
k.heat
puts k.hot?
k.heat(75)
puts k.hot?Output:
false
trueTantangan
MudahLengkapi class ShoppingCart. add(name, price) menyimpan sebuah item dan mengembalikan cart itu sendiri, sehingga pemanggilannya bisa dirangkai. total mengembalikan jumlah harga, free_shipping? mengembalikan true jika totalnya 20 atau lebih, dan summary mengembalikan 3 items, total 12.50 (atau 1 item, total 4.00), dengan dua angka desimal.
Kode yang disediakan menambahkan satu item untuk setiap baris input (name price) dengan merangkai pemanggilannya, lalu mencetak summary dan free shipping: true atau free shipping: false.
Tulis kodemu di shopping_cart.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'shopping_cart'
# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
input << line.chomp
end
cart = input.reduce(ShoppingCart.new) do |c, line|
name, price = line.split
c.add(name, price.to_f)
end
puts cart.summary
puts "free shipping: #{cart.free_shipping?}"
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