Menu
CoddyTech

Kitaplar ve Üyeler

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

Bu projede bir kütüphane sisteminin temelini oluşturacaksın. Bir Library nesnesi, her satırda bir komut alır ve her birine yanıt verir. Beş adımda kitap ve üye eklemeyi, kitap ödünç vermeyi ve geri almayı, kataloğu aramayı ve rapor yazdırmayı öğrenir.

ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORT

Veri modeli, bu bölümde öğretilenleri kullanır. Book, id ve title değerlerini salt okunur olarak, borrower değerini ise bir erişimci aracılığıyla sunar; ayrıca available? koşulunu içerir. Member, ödünç aldığı kitapların kimliklerini bir dizide tutar. Her sınıf kendi dosyasında bulunur: book.rb, member.rb ve library.rb. Kitaplık, her iki tür nesneyi de yalnızca kendi yöntemlerinin eriştiği karmalarda tutar:

class Book
  attr_reader :id, :title
  attr_accessor :borrower

  def initialize(id, title)
    @id = id
    @title = title
    @borrower = nil
  end

  def available?
    borrower.nil?
  end
end

books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?

Çıktı:

false

handle(line) komutu ayırır ve ilk sözcüğüne göre case ile dallanır. Her dal yanıtlarını bir dizi olarak döndürür; böylece REPORT gibi bir komut birden fazla satırla yanıt verebilir ve return bir hata yanıtıyla erken çıkar. Bir kitabın başlığı boşluk içerebilir, bu nedenle başlık kimlikten sonraki her şeydir:

parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{id}: #{title}"

Çıktı:

7: The Hobbit
challenge icon

Görev

Kolay

İlk iki komut için Library#handle metodunu tamamla:

  • ADD_BOOK id title: kullanılabilir yeni bir kitap kaydet ve added book 1: Dune yanıtını ver; id kullanımdaysa book 1 exists yanıtını ver.
  • JOIN name: bir üye ekle ve welcome ada yanıtını ver; ad zaten varsa ada is already a member yanıtını ver.

Sağlanan kod her giriş satırını library.handle(line) metoduna iletir ve döndürülen her yanıtı ayrı bir satıra yazdırır. Üye adları küçük harflerden oluşan tek sözcüktür, kitap id'leri tam sayıdır ve giriş şu ana kadar yalnızca açıklanan komutları içerir. Diğer tüm komutlar unknown command yanıtını verir.

Kodunu book.rb, member.rb ve library.rb dosyalarına yaz. main.rb sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

require_relative 'book'
require_relative 'member'
require_relative 'library'

# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
input = []
while (line = gets)
  input << line.chomp
end
library = Library.new
input.each do |line|
  library.handle(line).each { |reply| puts reply }
end
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