Menu
CoddyTech

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.0

Class 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
end

Output:

3.14
12.57
undefined method `area_for' for an instance of Circle

class << 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.2

Gunakan 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
end
challenge icon

Tantangan

Mudah

Lengkapi 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) }
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online