Agregar estudiante
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 49 de 56.
Define un método add_student que registre a un nuevo estudiante en el hash compartido student_records.
Rechazar duplicados es la única rama; una vez que un estudiante existe, infórmalo y regresa sin sobrescribir.
Desafío
FácilEn la parte superior de tu archivo, mantén student_records = {}. Luego define un método add_student(name, age, courses) que:
- Si
nameya es una clave enstudent_records, imprimeStudent '<name>' already exists.y retorna. - De lo contrario, almacena
{ age: age, grades: [], courses: courses }bajonamee imprimeStudent '<name>' added.
En la parte inferior de tu archivo, reemplaza el bloque de prueba con:
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspectLa salida esperada es:
Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}Debido a que los métodos no pueden ver variables locales del script que los contiene, declara student_records con $student_records (una global) para que el método pueda leerla y actualizarla. Usa ese nombre también dentro del método.
Hoja de referencia
Usa una variable global ($variable_name) para que los métodos puedan acceder y modificar variables definidas fuera de su alcance:
$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."
endPuntos clave:
- Usa el prefijo
$para hacer que una variable sea global (accesible dentro de los métodos) - Usa
.key?(name)para verificar si un hash ya contiene una clave - Usa
returnpara salir de un método anticipadamente después de manejar un duplicado
Pruébalo tú mismo
$student_records = {}
# POR HACER: def add_student(name, age, courses), proteger contra duplicados,
# almacenar { age:, grades: [], courses: }, imprimir agregado/ya existe
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline