Sınıf Metotları
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 57.
Bir sınıf yöntemi tek bir örneğe değil, sınıfa aittir. Sınıf gövdesinde self sınıftır; bu nedenle def self.name sınıf üzerinde bir yöntem tanımlar. Bu yöntemi doğrudan sınıf üzerinde çağırırsın:
class Temperature
def self.to_fahrenheit(celsius)
celsius * 9 / 5.0 + 32
end
end
puts Temperature.to_fahrenheit(100)
puts Temperature.to_fahrenheit(-40)Çıktı:
212.0
-40.0Sınıf metotları ve örnek metotları farklı yerlerde bulunur. Bir örnek, bir sınıf metodunu doğrudan çağıramaz; ona self.class veya sınıf adı üzerinden ulaşır:
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Çıktı:
3.14
12.57
undefined method `area_for' for an instance of Circleclass << self, sınıf gövdesinin her def ifadesinin bir sınıf yöntemi olduğu bir bölümünü açar. Bir sınıfın birden fazla sınıf yöntemi olduğunda self. yazma gereksinimini ortadan kaldırır:
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)Çıktı:
6.2
42.2Bir nesneye değil, bir şeyin türüne ait olan işler için sınıf yöntemi kullanın: birimleri dönüştürmek, metni bir nesneye ayrıştırmak veya tüm örneklerin sayısını tutmak gibi. Bir nesnenin verilerine ihtiyaç duyan işler ise örnek yöntemi olarak kalır:
class Invoice
def self.tax_rate # her fatura için aynı
0.2
end
def tax # bu faturanın tutarına ihtiyaç duyar
@amount * Invoice.tax_rate
end
endGörev
KolayTemperature sınıfının metotlarını tamamla. to_fahrenheit(c) ve to_celsius(f) bir değeri dönüştürür. feel(celsius), 0'ın altında freezing, 15'in altında cold, 25'in altında mild ve diğer durumlarda hot döndürür. convert(text), 20 C veya 68 F gibi bir metin alır ve bir ondalık basamakla, Celsius değerinin hissedilen sıcaklığıyla birlikte 20.0 C = 68.0 F (mild) veya 68.0 F = 20.0 C (mild) döndürür; diğer sınıf metotlarını kullanır.
Sağlanan kod, her giriş satırı için Temperature.convert(line) çağrısını yapar ve sonucu yazdırır. Hiçbir Temperature örneği oluşturulmaz.
Kodun temperature.rb dosyasına yazılmalıdır. main.rb sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'temperature'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
input.each { |line| puts Temperature.convert(line) }
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi