Menu
CoddyTech

Làm việc với tệp

Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 1 trên 57.

Các chương trình thực tế được chia thành nhiều tệp. Trong Swift, mọi tệp .swift của một ứng dụng đều được biên dịch cùng nhau thành một module, vì vậy bạn có thể dùng hàm hoặc kiểu được khai báo trong một tệp ở bất kỳ tệp nào khác mà không cần import:

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

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

Chạy chương trình này sẽ in ra Hello, Ada!: main.swift gọi hàm nằm trong Greeting.swift.

Chỉ một tệp được chứa câu lệnh ở cấp cao nhất, tức là code tự chạy bên ngoài mọi hàm hoặc kiểu dữ liệu. Tệp đó là main.swift, nơi chương trình bắt đầu. Các tệp khác chỉ chứa khai báo:

// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi")      // lỗi: không thể đặt câu lệnh ở cấp cao nhất tại đây

// main.swift
let name = readLine() ?? "friend"   // Có thể viết code ở cấp cao nhất trong main.swift
print(greeting(for: name))

Bố cục thường dùng là mỗi tệp chứa một kiểu dữ liệu, với tên tệp đặt theo tên kiểu dữ liệu: Dog.swift chứa Dog, Account.swift chứa Account. Trong các thử thách của phần này, bạn viết code trong những tệp đó, còn main.swift chứa code đầu vào/đầu ra được cung cấp, thường thì bạn không thể chỉnh sửa tệp này. Trình chỉnh sửa hiển thị mỗi tệp dưới dạng một thẻ.

Dog.swift        // class Dog { ... }
Account.swift    // struct Account { ... }
main.swift       // đọc đầu vào và in ra kết quả

Quyền truy cập cũng áp dụng theo tệp. private và fileprivate ẩn một khai báo khỏi các tệp khác, còn mặc định là internal, giúp khai báo đó hiển thị trong mọi tệp của module:

// Secret.swift
fileprivate let salt = "x7"          // Chỉ tệp này mới truy cập được
func hashed(_ s: String) -> String { s + salt }

// main.swift
print(hashed("pw"))                  // Hợp lệ: hashed là internal
// print(salt)                       // lỗi: salt là fileprivate
challenge icon

Thử thách

Dễ

Chương trình có hai tệp. main.swift đọc tên và in ra kết quả của greeting(for:). Hoàn thành greeting(for:) trong Greeting.swift để hàm trả về Hello, Ada! cho tên Ada, hoặc Hello, friend! khi tên trống.

Code của bạn nằm trong Greeting.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

// Đoạn code đầu vào/đầu ra đã cho: giữ nguyên
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Playground Swift