Method class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 12 dari 57.
Method class dimiliki oleh class, bukan oleh satu instance. Di dalam body class, self adalah class, jadi def self.name mendefinisikan method pada class. Kamu memanggilnya pada class itu sendiri:
class Temperature
def self.to_fahrenheit(celsius)
celsius * 9 / 5.0 + 32
end
end
puts Temperature.to_fahrenheit(100)
puts Temperature.to_fahrenheit(-40)Output:
212.0
-40.0Class method dan method instance berada di tempat yang berbeda. Instance tidak dapat memanggil class method secara langsung. Instance mengaksesnya melalui self.class atau nama class:
class Circle
def self.area_for(r)
(3.14159 * r * r).round(2)
end
def initialize(r)
@r = r
end
def area
self.class.area_for(@r)
end
end
puts Circle.area_for(1)
puts Circle.new(2).area
begin
Circle.new(2).area_for(2)
rescue NoMethodError => e
puts e.message
endOutput:
3.14
12.57
undefined method `area_for' for an instance of Circleclass << self membuka bagian isi class yang setiap def-nya merupakan method class. Cara ini menghemat penulisan self. saat sebuah class memiliki beberapa method:
class Units
class << self
def km_to_miles(km)
(km * 0.621371).round(1)
end
def miles_to_km(miles)
(miles / 0.621371).round(1)
end
end
end
puts Units.km_to_miles(10)
puts Units.miles_to_km(26.2)Output:
6.2
42.2Gunakan class method untuk pekerjaan yang berkaitan dengan jenis sesuatu, bukan dengan satu object tertentu: mengonversi satuan, mengurai teks menjadi object, atau menyimpan jumlah semua instance. Pekerjaan yang memerlukan data dari satu object tetap menggunakan instance method:
class Invoice
def self.tax_rate # sama untuk setiap faktur
0.2
end
def tax # memerlukan jumlah pada faktur ini
@amount * Invoice.tax_rate
end
endTantangan
MudahLengkapi method class Temperature. to_fahrenheit(c) dan to_celsius(f) mengonversi nilai. feel(celsius) mengembalikan freezing untuk nilai di bawah 0, cold untuk nilai di bawah 15, mild untuk nilai di bawah 25, dan hot untuk nilai lainnya. convert(text) menerima teks seperti 20 C atau 68 F dan mengembalikan 20.0 C = 68.0 F (mild) atau 68.0 F = 20.0 C (mild), dengan satu angka desimal dan deskripsi rasa suhu berdasarkan nilai Celsius; method ini menggunakan method class lainnya.
Code yang disediakan memanggil Temperature.convert(line) untuk setiap baris input dan mencetak hasilnya. Tidak ada instance Temperature yang dibuat.
Tulis kodemu di temperature.rb. main.rb berisi code input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'temperature'
# Kode input/output yang disediakan: biarkan tetap seperti ini
input = []
while (line = gets)
input << line.chomp
end
input.each { |line| puts Temperature.convert(line) }
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