Menu
CoddyTech

Sınıf Metotları

Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 57.

Sınıf yöntemi sınıfa aittir, tek bir örneğe değil. Sınıf gövdesinde self sınıftır; bu nedenle def self.name sınıfta 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.0

Sı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 erişir:

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 Circle

class << self, sınıf gövdesinin içindeki her def ifadesinin sınıf yöntemi olduğu bir bölüm açar. Bir sınıfta birden fazla böyle yöntem olduğunda self. yazma gereğini 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.2

Tek bir nesneye değil, nesne türüne ait olan işler için sınıf yöntemi kullanın: birimleri dönüştürme, metni bir nesneye ayrıştırma veya tüm örneklerin sayısını tutma. 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ı gerekli
    @amount * Invoice.tax_rate
  end
end
challenge icon

Görev

Kolay

Temperature sınıfının metotlarını tamamlayın. 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 ve 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 girdi satırı için Temperature.convert(line) çağrısı yapar ve sonucu yazdırır. Temperature örneği oluşturulmaz.

Kodunuz temperature.rb dosyasına yazılmalıdır. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

require_relative 'temperature'

# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input = []
while (line = gets)
  input << line.chomp
end
input.each { |line| puts Temperature.convert(line) }
quiz iconKendini test et

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

Kendi başına pratik yap: Online Ruby derleyicisi