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 Kotlin của Coddy. Bài học 1 trên 57.
Các chương trình thực tế thường được chia thành nhiều tệp. Tất cả các tệp .kt của một chương trình Kotlin đều được biên dịch cùng nhau, vì vậy bạn có thể dùng hàm hoặc lớp được khai báo trong một tệp ở bất kỳ tệp nào khác thuộc cùng package mà không cần import:
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// Main.kt
fun main() {
println(greeting("Ada"))
}Chạy chương trình này sẽ in ra Hello, Ada!: main trong Main.kt gọi hàm nằm trong Greeting.kt.
Một tệp Kotlin chỉ chứa các khai báo: lớp, hàm, thuộc tính. Các câu lệnh như println(...) phải nằm bên trong một hàm. Chương trình bắt đầu tại fun main(), theo quy ước nằm trong Main.kt:
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// println("hi") // lỗi: các câu lệnh phải nằm trong một hàm (function)
// Main.kt
fun main() {
val name = readLine() ?: "friend"
println(greeting(name))
}Bố cục thường dùng là mỗi tệp chứa một lớp, với tên tệp trùng tên lớp: Dog.kt chứa Dog, Account.kt 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.kt chứa code đầu vào/đầu ra được cung cấp mà bạn thường không thể chỉnh sửa. Trình chỉnh sửa hiển thị mỗi tệp dưới dạng một thẻ.
Dog.kt // class Dog(...) { ... }
Account.kt // class Account { ... }
Main.kt // fun main(): đọc đầu vào và in ra kết quảPhạm vi hiển thị cũng áp dụng cho các tệp. Một khai báo ở cấp cao nhất có từ khóa private chỉ hiển thị trong tệp chứa nó, còn mặc định là public, khiến khai báo đó hiển thị trong mọi tệp:
// Secret.kt
private const val SALT = "x7" // chỉ tệp này mới truy cập được
fun hashed(s: String) = s + SALT
// Main.kt
fun main() {
println(hashed("pw")) // hợp lệ: hashed là public
// println(SALT) // lỗi: SALT là private trong Secret.kt
}Thử thách
DễChương trình có hai tệp. main trong Main.kt đọc tên và in ra kết quả của greeting(name). Hoàn thành greeting trong Greeting.kt để hàm trả về Hello, Ada! với tên Ada, hoặc Hello, friend! khi tên trống.
Code của bạn nằm trong Greeting.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên nhé
val input = generateSequence(::readLine).toList()
for (name in input) println(greeting(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ớpHàm khởi tạo chínhKhối init và kiểm tra tính hợp lệHàm khởi tạo phụÔn tập: thẻ thư viện4Kế thừa
Lớp mở và lớp conGhi đè thành viênsuper và hàm khởi tạoLớp trừu tượngÔn tập: Danh bạ nhân viên2Thuộc tính và tính đóng gói
Trình truy cập tùy chỉnhBộ sửa đổi phạm vi truy cậpSetter riêng tưlazy và lateinitÔn tập: tài khoản ngân hàng5Giao diện
Khai báo giao diệnPhương thức mặc địnhNhiều giao diệnGiao diện như kiểu dữ liệuÔn tập: Phương thức thanh toánTự luyện tập: Playground Kotlin