Menu
CoddyTech

文件操作

本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 1 课,共 57 课。

实际的程序会拆分到多个文件中。Kotlin 程序的所有 .kt 文件都会一起编译,因此,在一个文件中声明的函数或类,无需导入就可以在同一程序包的任何其他文件中使用:

// Greeting.kt
fun greeting(name: String) = "Hello, $name!"

// Main.kt
fun main() {
    println(greeting("Ada"))
}

运行此程序会输出 Hello, Ada!:Main.kt 中的 main 会调用 Greeting.kt 中的函数。

Kotlin 文件中只能包含声明:类、函数、属性。像 println(...) 这样的语句必须放在函数中。程序从 fun main() 开始,按照惯例,它位于 Main.kt 中:

// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// println("hi")            // 错误:语句必须写在函数内部

// Main.kt
fun main() {
    val name = readLine() ?: "friend"
    println(greeting(name))
}

通常的布局是每个文件放一个类,并以类名命名:Dog.kt 中放置 Dog,Account.kt 中放置 Account。在本单元的挑战中,你的代码要写在这些文件里,Main.kt 中则包含提供的输入和输出代码,通常无法编辑。编辑器会将每个文件显示为一个标签页。

Dog.kt        // class Dog(...) { ... }
Account.kt    // class Account { ... }
Main.kt       // fun main(): 读取输入并打印结果

可见性也适用于文件。标记为 private 的顶层声明仅在其所在文件内可见,而默认可见性 public 会使其在每个文件中都可见:

// Secret.kt
private const val SALT = "x7"        // 只有这个文件能访问它
fun hashed(s: String) = s + SALT

// Main.kt
fun main() {
    println(hashed("pw"))            // 没问题:hashed 是公开的
    // println(SALT)                 // 错误:SALT 在 Secret.kt 中是私有的
}
challenge icon

挑战

简单

程序有两个文件。Main.kt 中的 main 会读取姓名,并打印 greeting(name) 的结果。请完成 Greeting.kt 中的 greeting,使其在姓名为 Ada 时返回 Hello, Ada!,姓名为空时返回 Hello, friend!。

你的代码应写在 Greeting.kt 中。Main.kt 包含提供的输入/输出代码,不能编辑。

亲手试试

fun main() {
    // 提供的输入/输出代码:保持原样。
    val input = generateSequence(::readLine).toList()
    for (name in input) println(greeting(name))
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Kotlin 在线编辑器