Kotlin可以声明顶级函数,不像java,c#和Scala语言那样,必须声明一个类来持有函数。除了顶级函数,kotlin还可以声明成员函数和拓展函数。
局部函数
kotlin支持局部函数,就是一个函数内部定义另一个函数。
fun dfs(graph: Graph) {
fun dfs(current: Vertex, visited: Set<Vertex>) {
if (!visited.add(current)) return
for (v in current.neighbors)
dfs(v, visited)
}
dfs(graph.vertices[0], HashSet())
}
局部函数可以访问外部函数的局域变量(例如闭包),在上面的例子中,visiied就是局域变量,换个写法:
fun dfs(graph: Graph) {
val visited = HashSet<Vertex>()
fun dfs(current: Vertex) {
if (!visited.add(current)) return
for (v in current.neighbors)
dfs(v)
}
dfs(graph.vertices[0])
}
成员函数
一个成员函数需要定义在类或者对象内部。
class gobj() {
fun attack() { print("Attack") }
}
成员函数使用dot符号调用:
Gobj.attack()