Ôn tập: giải đấu thể thao
Thuộc phần Lập trình hướng đối tượng trong hành trình Ruby của Coddy. Bài học 31 trên 57.
Thử thách
KhóHãy xây dựng một bảng xếp hạng giải đấu nhỏ. Team bao gồm Comparable: một đội xếp cao hơn khi có nhiều điểm hơn (3 điểm cho một trận thắng, 1 điểm cho một trận hòa), tiếp đến là hiệu số bàn thắng tốt hơn, rồi đến tên đứng trước theo thứ tự bảng chữ cái. record(scored, conceded) cập nhật đội, còn to_s trả về Reds 7 pts, +3. League bao gồm Enumerable: each lần lượt trả về các đội, play(line) ghi nhận kết quả như Reds 2-1 Blues cho cả hai đội (tạo đội vào lần đầu tên đội xuất hiện), còn table trả về các đội từ mạnh nhất đến yếu nhất bằng sort. Mô-đun Rankable có leader (đội mạnh nhất, lấy từ max) được đưa vào League.
Code được cung cấp chuyển từng dòng đầu vào cho play, sau đó in bảng xếp hạng kèm thứ hạng (1. Reds 7 pts, +3), đội dẫn đầu và các đội chưa thắng trận nào, được tìm bằng select.
Code của bạn nằm trong các tệp rankable.rb, team.rb và league.rb. main.rb chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
require_relative 'rankable'
require_relative 'team'
require_relative 'league'
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input = []
while (line = gets)
input << line.chomp
end
league = League.new
input.each { |line| league.play(line) }
league.table.each_with_index { |t, i| puts "#{i + 1}. #{t}" }
puts "leader: #{league.leader&.name}"
winless = league.select { |t| t.wins.zero? }.map(&:name).sort
puts "no wins: #{winless.empty? ? "none" : winless.join(", ")}"
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpBiến instancePhương thức và selfto_s và inspectÔn tập: thẻ thư viện4Tính đóng gói
Phương thức riêng tưPhương thức được bảo vệPhương thức thiết lập riêng tưBảo vệ trạng tháiÔn tập: máy bán hàng tự động7Tính đa hình và duck typing
Tính đa hìnhDuck typingPhương thức trừu tượngcase và lớpÔn tập: phương thức thanh toán2Phương thức truy cập và self
Phương thức đọc và ghiPhương thức gán tùy chỉnhself trong phương thứcĐịnh danh và tính bằng nhauÔn tập: Danh sách liên hệ3Phương thức và biến của lớp
Phương thức lớpBiến thực thể của lớpHằng sốPhương thức tạo đối tượngÔn tập: mã giảm giá6Module và mixin
Module và includeMở rộng đối tượngModule ComparableModule EnumerableÔn tập: giải đấu thể thaoTự luyện tập: Trình biên dịch Ruby online