עבודה עם קבצים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Ruby של Coddy. שיעור 1 מתוך 57.
תוכניות אמיתיות מחולקות למספר קבצים. קובץ Ruby טוען קובץ אחר באמצעות require_relative, ואחריו הנתיב של הקובץ ביחס לקובץ הנוכחי, בדרך כלל בלי הסיומת .rb. אחרי השורה הזאת אפשר להשתמש בפונקציות ובמחלקות של הקובץ שנטען:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")הרצת ruby main.rb מדפיסה Hello, Ada!: main.rb טוען את greeting.rb ואז קורא לפונקציה שלו.
התוכנית מתחילה בקובץ שמריצים, כאן main.rb, ו-Ruby מבצעת אותו מלמעלה למטה. require_relative מריץ את הקובץ האחר באותה נקודה, ורק בפעם הראשונה: קריאה שנייה ל-require_relative 'greeting' מחזירה false ולא עושה דבר. אפשר להשתמש בשם רק לאחר שהקובץ שמגדיר אותו נטען:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb עדיין לא נטען
require_relative 'greeting' # מריץ את greeting.rb, מחזיר true
require_relative 'greeting' # כבר נטען, מחזיר false
puts greeting("Bo")הפריסה המקובלת היא מחלקה אחת בכל קובץ, ושם הקובץ מבוסס על שם המחלקה ב־snake_case: class Dog נמצאת ב־dog.rb, ו־class BankAccount נמצאת ב־bank_account.rb. באתגרים של יחידה זו, main.rb מכיל את קוד הקלט/פלט שסופק, ומתחיל בשורת require_relative אחת לכל קובץ, לפי סדר הטעינה: מחלקה שעליה מחלקה אחרת מבוססת נטענת ראשונה.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # מתודות עזר
main.rb # שורות require_relative, ואחריהן קוד הקלט/פלטמה שקובץ משתף תלוי בסוג השם. אפשר להשתמש בכל הקבצים שנטענים אחריו במתודות שמוגדרות עם def בראש הקובץ, במחלקות ובקבועים. משתנה מקומי שייך רק לקובץ שבו הוא מוגדר:
# settings.rb
limit = 3 # משתנה מקומי: רק settings.rb יכול לגשת אליו
MAX_ITEMS = 3 # קבוע: גלוי לאחר הטעינה
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # לכל היותר 3
puts MAX_ITEMS # 3
# puts limit # NameError: משתנה מקומי לא מוגדראתגר
קללתוכנית יש שני קבצים. main.rb טוען את greeting.rb, קורא שמות ומדפיס את התוצאה של greeting(name). השלימו את greeting בתוך greeting.rb כך שתחזיר Hello, Ada! עבור השם Ada, או Hello, friend! כשהשם ריק.
הקוד שלכם צריך להופיע בתוך greeting.rb. הקובץ main.rb מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
require_relative 'greeting'
# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותמשתני מופעמתודות ו־selfto_s ו־inspectסיכום — כרטיס ספרייה3מתודות ומשתנים של מחלקה
מתודות של מחלקהמשתני מופע של מחלקהקבועיםמתודות ליצירת מופעיםסיכום – קודי קופוןתרגלו בעצמכם: קומפיילר Ruby אונליין