Menu
CoddyTech

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

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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(), הקובץ שמורץ אחרון הוא זה שקובע. גם ערך שמופיע בשורה בפני עצמה בקובץ שמורץ באמצעות source לא יודפס, ולכן קבצים שאמורים להציג משהו קוראים ל-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 אונליין