Menu
CoddyTech

עבודה עם קבצים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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: משתנה מקומי לא מוגדר
challenge icon

אתגר

קל

לתוכנית יש שני קבצים. 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) }
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Ruby אונליין