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à fileprivateThử 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)) }
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
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift