kotlin函数

函数

参数:Pascal表示法 ---》 name : type

  • 多参数用逗号隔开
  • 参数赋值: 例如 name:type = 给予的默认值(= value如果没有默认值,这部分是可以省略的)
  • 覆盖方法(override)总是使用与基类型方法相同的默认参数值。当覆盖一个带有默认参数值的方法时,必须从签名中省略默认参数值。
具名参数: name = value

在多参数的函数中,如果有些参数添加了默认值,这时在调用时,就可以省略掉,但是调用时必须使用具名参数格式调用,例子如下:
多参函数

fun foo(bar: Int = 0, baz: Int) { /*……*/ }

省略默认值参数,使用具名参数调用

foo(baz = 1) // 使用默认值 bar = 0

函数如果在默认参数的最后一个参数是Lambda表达式, 那么它可以用具名参数在括号内传入,也可以在括号外传入
例子:
多默认参数函数

fun foo(bar: Int = 0, baz: Int = 1, qux: () -> Unit) { /*……*/ }

foo(1) { println("hello") }     // 使用默认值 baz = 1
foo(qux = { println("hello") }) // 使用两个默认值 bar = 0 与 baz = 1
foo { println("hello") }        // 使用两个默认值 bar = 0 与 baz = 1

当一个函数调用混用位置参数与具名参数时,所有位置参数都要放在第一个具名参数之前。例如,允许调用f(1,y=2) 但不允许f(x=1,2)。

可以通过使用星号操作符将可变数量参数(vararg)以具名形式传入:

fun foo(vararg string:String){/******/}

调用

foo(string = *arrayOf("a", "b", "c"))

返回Unit函数

在函数中Unit的返回类型是可选的:return Unit 或者 return

可变数量参数

函数中可以用可变数量参数,但是一般都是放在参数的最后一个(如果不是最后一个,那此参数后面参数使用具名参数语法传入),可以用vararg修饰符标记
例子:

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts) // ts is an Array
        result.add(t)
    return result
}

调用:

val list = asList(1,2,3)

如果已经有一个数组并希望将其内容传给该函数,我们使用伸展(spread)操作符(在数组前面加*)
调用例子:

val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4)

函数的作用域

局部函数

kotlin支持局部函数,即一个函数在另一个函数内部

fun dfs(graph: Graph) {
    fun dfs(current: Vertex, visited: MutableSet<Vertex>) {
        if (!visited.add(current)) return
        for (v in current.neighbors)
            dfs(v, visited)
    }

    dfs(graph.vertices[0], HashSet())
}

局部函数可以访问外部函数(即闭包)的局部变量,所以在上例中,visited可以是局部变量

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 Sample() {
    fun foo() { print("Foo") }
}

成员函数以点表示法调用

Sample().foo() // 创建类 Sample 实例并调用 foo

泛型函数

函数可以有泛型参数,通过在函数名前使用尖括号指定

fun <T> singletonList(item: T): List<T> { /*……*/ }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 一、 概述 函数:也就是子程序。高阶函数:在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:接受一个或多...
    进击的小强阅读 851评论 1 50
  • Kotlin函数 默认参数(default arguments)示例代码 输出 对于重写的方法来说,子类所拥有的重...
    leofight阅读 349评论 0 1
  • Kotlin语言中,函数终于成为了一等公民,支持面向过程变成终于在“Java”阵营中成为了现实。 语法 Kotli...
    欧阳锋阅读 1,767评论 0 0
  • 我们学习Kotlin的一个重要环节,函数的声明和调用。将从Kotlin集合、字符串和正则表达式作为重点,先来看看如...
    Rocdo阅读 1,277评论 2 2
  • 可以到掘金,效果更好聊一聊Kotlin函数 一直想学习下Kotlin,毕竟已经被Android官方宣布kotln ...
    juexingzhe阅读 716评论 0 2