עבודה עם קבצים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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אתגר
קללתוכנית יש שני קבצים. 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)) }
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
תרגלו בעצמכם: Swift אונליין