הוספת תלמיד
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Ruby של Coddy. שיעור 49 מתוך 56.
הגדירו מתודה בשם add_student שרושמת תלמיד חדש במילון המשותף student_records.
סירוב לקבל כפילויות הוא הענף היחיד: ברגע שתלמיד קיים, דווחו על כך והחזירו בלי לדרוס את הרשומה.
אתגר
קלבראש הקובץ שלך השאר את student_records = {}. לאחר מכן הגדר מתודה add_student(name, age, courses) ש:
- אם
nameכבר קיים כמפתח ב־student_records, מדפיסהStudent '<name>' already exists.ומחזירה. - אחרת מאחסנת את
{ age: age, grades: [], courses: courses }תחתnameומדפיסהStudent '<name>' added.
בתחתית הקובץ שלך, החלף את בלוק הבדיקה ב:
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspectהפלט הצפוי הוא:
Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}מכיוון שמתודות לא יכולות לראות משתנים מקומיים מהסקריפט העוטף, הצהר על student_records באמצעות $student_records (משתנה גלובלי), כדי שהמתודה תוכל לקרוא אותו ולעדכן אותו. השתמש באותו שם גם בתוך המתודה.
נסו בעצמכם
$student_records = {}
# TODO: להגדיר def add_student(name, age, courses), למנוע כפילויות,
# לשמור { age:, grades: [], courses: }, להדפיס נוסף/כבר קיים
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מחרוזות לעומק
סקירה של מתודות למחרוזותאינטרפולציה של מחרוזותמעבר על מחרוזותפיצול וחיבורסיכום – שוזר המחרוזות4בלוקים, Procs ו־Lambdas
מהו בלוק?do..end לעומת סוגריים מסולסליםמילת המפתח yieldפרמטרים של בלוקProcs ו־Lambdasסיכום – איטרטור מותאם אישית7Hashes חלק 2
Hash.new עם ערכי ברירת מחדלמעבר על HashesHashes מקונניםמיזוג ושינויסיכום - מונה תדירויות10פרויקט - רשומות תלמידים
סקירת הפרויקטהוספת תלמיד5עוצמת Enumerable
Select ו־Rejectשרשור MapReduce / Injectcount, all?, any?, none?group_by ו־partitionsort_by, min_by, max_byסיכום - צינור נתוניםתרגלו בעצמכם: קומפיילר Ruby אונליין