Menu
Coddy logo textTech

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

חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 1 מתוך 57.

תוכניות אמיתיות מפוצלות לכמה קבצים. ב-R, source("Greeting.R") מריצה קובץ אחר מתחילתו ועד סופו, וכל פונקציה שהקובץ מגדיר זמינה לאחר מכן:

# Greeting.R
greeting <- function(name) {
  paste0("Hello, ", name, "!")
}

# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")

הרצת main.R מדפיסה Hello, Ada!: שורת source() טוענת את greeting() לפני ש-main.R קוראת לה.

התוכנית מתחילה בקובץ שמריצים, כאן main.R, ו־R קוראת אותו שורה אחר שורה. לסדר יש חשיבות: פונקציה קיימת רק לאחר שהקובץ שמגדיר אותה נטען באמצעות source, לכן שורות source() מופיעות למעלה:

# main.R
cat(greeting("Ada"), "\n")   # שגיאה: לא נמצאה הפונקציה "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n")   # עובד: greeting() קיימת כעת

הפריסה המקובלת היא מחלקה אחת לכל קובץ, ושם הקובץ זהה לשם המחלקה: Account.R מכיל את הבנאי account ואת המתודות שלו, Shape.R מכיל את הגנריקות shape. באתגרים של יחידה זו, הקוד שלך ייכתב בקבצים האלה, ו-main.R מכיל את קוד הקלט/פלט שסופק, כאשר שורות source() כבר מופיעות בראשו בסדר הנכון. העורך מציג כל קובץ כלשונית.

Shape.R      # פונקציות גנריות המשותפות לכל צורה: יש לטעון אותן תחילה
Circle.R     # מחלקת המעגל והמתודות שלה
main.R       # source("Shape.R"); source("Circle.R"); קורא קלט ומדפיס תוצאות

source() מריצה קובץ בסביבת הסביבה הגלובלית, ולכן הפונקציות והמשתנים שלו הופכים לשמות גלובליים. ל-R אין שמות פרטיים לקובץ: אם שני קבצים מגדירים את helper(), הקובץ שנטען אחרון הוא הקובע. גם ערך שמופיע בשורה בפני עצמו בקובץ שנטען לא יודפס, ולכן קבצים שאמורים להציג משהו קוראים ל-cat():

# Tools.R
total <- 0                 # משתנה גלובלי לאחר טעינת הקובץ
42                         # לא מודפס על ידי source()
helper <- function(x) x * 2

# Other.R
helper <- function(x) x + 1   # נטען מאוחר יותר: מחליף את helper שלמעלה
challenge icon

אתגר

קל

התוכנית כוללת שני קבצים. main.R טוען את Greeting.R, קורא שמות ומדפיס את התוצאה של greeting(name) עבור כל אחד מהם. השלימו את greeting() בתוך Greeting.R כך שתחזיר Hello, Ada! עבור השם Ada, או Hello, friend! כאשר השם ריק.

הקוד שלכם ייכתב בתוך Greeting.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

source("Greeting.R")

# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
quiz iconבחנו את עצמכם

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

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

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