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 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
}
challenge icon

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))
}
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 Kotlin