Recapitulação - Liga Esportiva
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 31 de 57.
Desafio
DifícilCrie uma pequena tabela de classificação. Team inclui Comparable: uma equipe é maior quando tem mais pontos (3 por vitória, 1 por empate), depois um saldo de gols melhor e, por fim, um nome que vem antes em ordem alfabética. record(scored, conceded) atualiza a equipe, e to_s retorna Reds 7 pts, +3. League inclui Enumerable: each produz as equipes, play(line) registra um resultado como Reds 2-1 Blues para ambas as equipes (criando uma equipe na primeira vez que seu nome aparece), e table retorna as equipes da melhor para a pior usando sort. O módulo Rankable, com leader (a melhor equipe, obtida de max), é incluído em League.
O código fornecido passa cada linha de entrada para play e, em seguida, imprime a tabela com as posições (1. Reds 7 pts, +3), a líder e as equipes sem nenhuma vitória em qualquer jogo, encontradas com select.
Seu código deve estar em rankable.rb, team.rb e league.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'rankable'
require_relative 'team'
require_relative 'league'
# Código de entrada/saída fornecido: mantenha-o como está
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(", ")}"
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de Livros3Métodos e Variáveis de Classe
Métodos de ClasseVariáveis de Instância da ClasseConstantesMétodos de FábricaRevisão - Códigos de Cupom6Módulos e Mixins
Módulos e includeEstendendo ObjetosO Módulo ComparableO Módulo EnumerableRecapitulação - Liga EsportivaPratique por conta própria: Compilador de Ruby online