Pembaca dan Penulis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 7 dari 57.
Menulis method reader untuk setiap variabel instance terasa berulang. attr_reader :title di dalam isi class menghasilkan method title, yang mengembalikan @title. Satu baris dapat mencantumkan beberapa nama:
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.pagesOutput:
Dune
412attr_writer :title menghasilkan sebuah setter, method title=, yang menyimpan argumennya ke dalam @title. Ruby memungkinkan kamu memanggilnya dengan sintaks penugasan, 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.titleOutput:
Dune Messiahattr_accessor menghasilkan reader dan setter. Dengan keduanya, bentuk singkat seperti += juga berfungsi, karena player.score += 5 berarti player.score = player.score + 5:
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}"Output:
Ada L.: 8Ungkapkan sesedikit mungkin. Gunakan attr_reader untuk nilai yang boleh dibaca oleh kode di luar, tetapi tidak boleh diubah, dan tambahkan writer hanya jika mengubah nilai dari luar merupakan bagian dari desain. Menetapkan nilai ke atribut yang hanya bisa dibaca akan memunculkan NoMethodError:
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.titleOutput:
undefined method `title=' for an instance of Book
DuneTantangan
MudahLengkapi class Book. Kode di luar class dapat membaca title, author, dan pages, serta dapat membaca dan mengubah pages_read, yang dimulai dari 0. progress mengembalikan Dune: 120/412 (29%), dengan persentase dibulatkan ke bawah.
Code yang disediakan membuat sebuah buku dari tiga baris input pertama (judul, penulis, jumlah halaman). Setiap baris berikutnya berisi jumlah halaman yang telah dibaca pembaca; code menambahkan setiap jumlah dengan book.pages_read += n. Terakhir, code mencetak Dune by Frank Herbert dan progres.
Letakkan kodemu di book.rb. main.rb berisi code input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
require_relative 'book'
# Kode input/output yang disediakan: biarkan apa adanya
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
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