Menu
Coddy logo textTech

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

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין