Menu
Coddy logo textTech

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

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

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

// 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 אונליין