Okuyucular ve Yazıcılar
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 7 / 57.
Her örnek değişken için bir okuyucu yöntemi yazmak tekrarlayıcıdır. Sınıf gövdesindeki attr_reader :title, @title değerini döndüren title yöntemini oluşturur. Tek bir satırda birden fazla ad listelenebilir:
class Book
attr_reader :title, :pages
def initialize(title, pages)
@title = title
@pages = pages
end
end
book = Book.new("Dune", 412)
puts book.title
puts book.pagesÇıktı:
Dune
412attr_writer :title, @title içinde aldığı argümanı saklayan title= metoduyla bir setter oluşturur. Ruby, bunu atama söz dizimiyle çağırmanıza olanak tanır: book.title = "Emma":
class Book
attr_reader :title
attr_writer :title
def initialize(title)
@title = title
end
end
book = Book.new("Dune")
book.title = "Dune Messiah"
puts book.titleÇıktı:
Dune Messiahattr_accessor hem okuyucuyu hem de ayarlayıcıyı oluşturur. Her ikisi de mevcut olduğunda, += gibi kısa gösterimler de çalışır; çünkü player.score += 5, player.score = player.score + 5 anlamına gelir:
class Player
attr_accessor :name, :score
def initialize(name)
@name = name
@score = 0
end
end
ada = Player.new("Ada")
ada.score += 5
ada.score += 3
ada.name = "Ada L."
puts "#{ada.name}: #{ada.score}"Çıktı:
Ada L.: 8Mümkün olduğunca azını dışa açın. Dış kodun okuyabileceği ancak değiştiremeyeceği değerler için attr_reader kullanın ve yalnızca değeri dışarıdan değiştirmenin tasarımın bir parçası olduğu durumlarda bir yazıcı ekleyin. Yalnızca okuyucu olan bir niteliğe atama yapmak NoMethodError hatası verir:
class Book
attr_reader :title
def initialize(title)
@title = title
end
end
book = Book.new("Dune")
begin
book.title = "Emma"
rescue NoMethodError => e
puts e.message
end
puts book.titleÇıktı:
undefined method `title=' for an instance of Book
DuneGörev
KolayBook sınıfını tamamla. Kod dışından title, author ve pages okunabilir; başlangıçta 0 olan pages_read okunabilir ve değiştirilebilir. progress, yüzde aşağı yuvarlanmış olarak Dune: 120/412 (29%) döndürür.
Sağlanan kod, ilk üç girdi satırından (başlık, yazar, sayfa sayısı) bir kitap oluşturur. Sonraki her satır, okuyucunun okuduğu sayfa sayısını belirtir; kod, her birini book.pages_read += n ile ekler. Son olarak Dune by Frank Herbert ve ilerleme bilgisi yazdırılır.
Kodun book.rb dosyasına yazılmalıdır. main.rb sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'book'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
book = Book.new(input[0], input[1], input[2].to_i)
input.drop(3).each { |n| book.pages_read += n.to_i }
puts "#{book.title} by #{book.author}"
puts book.progress
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