Adicionar Aluno
Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 49 de 56.
Defina um método add_student que registra um novo aluno no hash compartilhado student_records.
Recusar duplicatas é a única ramificação; uma vez que um aluno exista, relate isso e retorne sem sobrescrever.
Desafio
FácilNo topo do seu arquivo, mantenha student_records = {}. Em seguida, defina um método add_student(name, age, courses) que:
- Se
namejá for uma chave emstudent_records, exibeStudent '<name>' already exists.e retorna. - Caso contrário, armazena
{ age: age, grades: [], courses: courses }sobnamee exibeStudent '<name>' added.
No final do seu arquivo, substitua o bloco de teste por:
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspectA saída esperada é:
Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}Como os métodos não conseguem ver variáveis locais do script envolvente, declare student_records com $student_records (uma global) para que o método possa lê-la e atualizá-la. Use esse nome dentro do método também.
Folha de consulta
Use uma variável global ($variable_name) para que os métodos possam acessar e modificar variáveis definidas fora de seu escopo:
$student_records = {}
def add_student(name, age, courses)
if $student_records.key?(name)
puts "Student '#{name}' already exists."
return
end
$student_records[name] = { age: age, grades: [], courses: courses }
puts "Student '#{name}' added."
endPontos principais:
- Prefixe com
$para tornar uma variável global (acessível dentro de métodos) - Use
.key?(name)para verificar se um hash já contém uma chave - Use
returnpara sair de um método antecipadamente após lidar com uma duplicata
Experimente você mesmo
$student_records = {}
# TODO: def add_student(name, age, courses), proteger contra duplicatas,
# armazenar { age:, grades: [], courses: }, imprimir adicionado/já existe
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings a Fundo
Visão Geral de Métodos de StringInterpolação de StringsIterando sobre StringsSplit e JoinRecapitulação - String Weaver4Blocos, Procs e Lambdas
O que é um Bloco?do..end vs ChavesA palavra-chave yieldParâmetros de BlocoProcs e LambdasRecapitulação - Iterador Customizado7Hashes Parte 2
Hash.new com Valores PadrãoIterando em HashesHashes AninhadosMesclando e TransformandoRecapitulação - Contador de Frequência10Projeto - Registros de Alunos
Visão Geral do ProjetoAdicionar Aluno2Intervalos
O que é um Intervalo?Métodos de IntervaloIntervalos em Case / WhenRecapitulação - Prática com Intervalos5O Poder do Enumerable
Select e RejectEncadeando o MapReduce / Injectcount, all?, any?, none?group_by e partitionsort_by, min_by, max_byRecapitulação - Data Pipeline