Menu
CoddyTech

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

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

תוכניות אמיתיות מחולקות לכמה קבצים. ב-Swift כל קובץ .swift של אפליקציה מתקמפל יחד למודול אחד, כך שניתן להשתמש בכל פונקציה או טיפוס שמוגדרים בקובץ אחד בכל קובץ אחר ללא ייבוא:

// Greeting.swift
func greeting(for name: String) -> String {
    "Hello, \(name)!"
}

// main.swift
print(greeting(for: "Ada"))

הרצת התוכנית מדפיסה Hello, Ada!: main.swift קורא לפונקציה שנמצאת ב-Greeting.swift.

רק קובץ אחד יכול להכיל פקודות ברמה העליונה, כלומר קוד שרץ בפני עצמו מחוץ לכל פונקציה או טיפוס. זהו הקובץ main.swift, ובו התוכנית מתחילה. שאר הקבצים מכילים הצהרות בלבד:

// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi")      // שגיאה: הוראות אינן מותרות כאן ברמה העליונה

// main.swift
let name = readLine() ?? "friend"   // אפשר לכתוב קוד ברמה העליונה ב-main.swift
print(greeting(for: name))

הפריסה המקובלת היא סוג אחד בכל קובץ, ושם הקובץ זהה לשם הסוג: Dog.swift מכיל את Dog, ו-Account.swift מכיל את Account. באתגרים של יחידה זו, הקוד שלך נמצא בקבצים האלה, ו-main.swift מכיל את קוד הקלט/פלט שסופק, שבדרך כלל אינך יכול לערוך. העורך מציג כל קובץ כלשונית.

Dog.swift        // class Dog { ... }
Account.swift    // struct Account { ... }
main.swift       // קורא את הקלט ומדפיס את התוצאות

בקרת הגישה חלה גם על קבצים. private ו־fileprivate מסתירים הצהרה מקבצים אחרים, ואילו ברירת המחדל, internal, הופכת אותה לגלויה בכל קובץ במודול:

// Secret.swift
fileprivate let salt = "x7"          // רק הקובץ הזה יכול לגשת אליו
func hashed(_ s: String) -> String { s + salt }

// main.swift
print(hashed("pw"))                  // תקין: hashed הוא internal
// print(salt)                       // שגיאה: salt הוא fileprivate
challenge icon

אתגר

קל

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

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

נסו בעצמכם

// קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
quiz iconבחנו את עצמכם

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

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

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