首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kotlin中的vararg和扩张函数

在Kotlin中,vararg是一个关键字,用于表示可变参数。它允许我们在函数中传递可变数量的参数,而不需要明确指定参数的个数。vararg参数必须是函数的最后一个参数,并且只能有一个vararg参数。

扩展函数是Kotlin中的一种特殊函数,它允许我们在不修改原始类的情况下向类添加新的函数。通过扩展函数,我们可以为任何类添加新的函数,包括标准库中的类。

vararg和扩展函数经常一起使用,以便在扩展函数中接收可变数量的参数。下面是一个示例:

代码语言:txt
复制
fun main() {
    val numbers = arrayOf(1, 2, 3, 4, 5)
    val sum = numbers.sum()
    println("Sum: $sum")
    
    val average = numbers.average()
    println("Average: $average")
    
    val product = numbers.product()
    println("Product: $product")
}

fun Array<Int>.sum(): Int {
    var sum = 0
    for (number in this) {
        sum += number
    }
    return sum
}

fun Array<Int>.average(): Double {
    var sum = 0
    for (number in this) {
        sum += number
    }
    return sum.toDouble() / this.size
}

fun Array<Int>.product(): Int {
    var product = 1
    for (number in this) {
        product *= number
    }
    return product
}

在上面的示例中,我们定义了三个扩展函数sum、average和product,它们分别计算数组中元素的总和、平均值和乘积。这些扩展函数接收可变数量的参数,因此我们可以直接在数组上调用它们。

在Kotlin中,vararg和扩展函数的组合可以提供更灵活和方便的函数调用方式,使代码更加简洁和易读。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin函数

/ 用中缀表示法调用扩展函数 1 shl 2 // 等同于这样 1.shl(2) 可变数量参数星操作符 可变参数vararg 使用关键字vararg来修饰可变参数。.../* 在函数内部,类型 T vararg 参数可见方式是作为 T 数组,即上例 ts 变量具有类型 Array 。...an Array result.add(t) return result } 因为有命名参数传递法可以直接在函数后面加括号传递lamba两种方式,其他java可变参数一致...这里等待后面具体来看什么时候非内联 在 Kotlin ,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法属性。

2.3K40

Kotlin内联函数

Kotlin内联函数还是挺好玩 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外类就会被创建。...内联函数使用 inline 修饰符标记,内联函数在 被使用时候编译器并不会生成函数调用代码,而是使用函数实现真实代码替换每一次函数调用 内联函数如何运作?...当一个函数被声明为 inline 时,它函数体是内联一一换句话说,函数体会被直接替换到函数被调用地方,而不是被正常调用。...Int、Long、Double都继承自Number,但是,如果我们在调用上面的函数时,传入了Array,这样是会报错!!...因为 kotlin在调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数内联函数.

1.5K20

浅谈Kotlin函数

本文简单谈下Kotlin函数,包括表达式函数体,命名参数,默认参数,顶层函数,扩展函数,局部函数,Lambda表达式,成员引用,with/apply函数等。...1.表达式函数体 通过下面这个简单例子看下函数声明相关概念,函数声明关键字是fun,嗯,比JSfunction还简单。 Kotlin参数类型是放在变量:后面,函数返回类型也是。...4.顶层函数 不同于Java函数只能定义在每个类里面,Kotlin采用了JavaScript 做法,可以在文件任意位置处定义函数,这种函数称为顶层函数。...,在Java可以抽取出独立函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。...Lambdathis引用指向是包围它类。 如果在Lambda要用到常规意义上this呢?这个就需要带接收者函数。看下比较常用两个函数withapply。

2.5K20

Kotlin内置函数用法区别总结

前言 在Kotlin源码标准库(Standard.kt)中提供了一些Kotlin扩展内置函数可以优化kotlin编码。Standard.kt是Kotlin一部分,它定义了一些基本函数。...本文主要记录kotlinlet、apply、run、also、with等函数用法区别,下面话不多说了,来一起看看详细介绍吧 0. let val a = "hello,kotlin".let{...= block(this) 解释:调用 “hello,kotlinlet函数,it在作用域中替代该对象(hello,kotlin),默认返回函数最后一行 1. apply val a = "hello...指定T作为闭包receiver,使用参数闭包返回结果。...以上,注意阅读Kotlin相关高阶函数源码时候,如果函数中最后一个参数为闭包,那么最后一个参可以不写在括号,而写在括号后面,如果只有一个参数,括号也可以去掉。

87320

Kotlin高阶函数常用高阶函数

10 ArrayList transform 函数,在 mapTo 方法,对集合进行迭代,然后将进行变换后数据添加到新集合,最后返回新集合。...map flatMap 主要区别就是在于传入函数返回值,一个是任意对象,一个是实现了 Iterable 接口对象 reduce 例子:打印集合元素之和 1fun main(args:...创建新集合 ArrayList ,将 ArrayList predicate 函数一并传递给 filterTo 函数。...疑惑点 函数定义 `T.() -> Unit` `() -> Unit` 区别 我们一般定义函数都会选择定义 1fun T.makeMoney2(block: () -> Unit)...里this代表是自身实例,而 ()->Unit 里,this代表是外部类实例 感谢 [Kotlin函数作为参数,T.()->Unit ()->Unit 区别][https://www.jianshu.com

1.7K10

Kotlin尾递归函数

Kotlin尾递归函数理解 kotlin,如果某个函数末尾又调用了函数自身,这种就称为尾递归函数。 尾递归函数需要在 fun 前面添加 tailrec。...尾递归函数会使用循环方式替代递归,从而避免栈溢出。 尾递归不能在异常处理try、 catch 、 finally 块中使用 。...findFixPoint(x: Double = 1.0): Double = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x)) 再例如: 计算阶乘函数...//定义计算阶乘函数 fun fact (n : Int) : Int{ if (n == 1) { return l } else { return n * fact(n - 1) } } 上面函数将调用自身作为其执行体最后一行代码...此时,上面函数可改为如下形式 //使用尾递归函数语法 tailrec fun factRec(n: Int, total : Int= 1): Int = if (n == 1) total else

79510

Kotlin高阶函数深入讲解

前言 在Kotlin,高阶函数是指将一个函数作为另一个函数参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。...Kotlin为开发者提供了丰富高阶函数,比如Standard.ktlet、with、apply等,_Collectioins.ktforEach等。...Kotlin 使用类似 (Int) – String 一系列函数类型来处理函数声明,这些类型具有与函数签名相对应特殊表示法,即它们参数返回值: 所有函数类型都有一个圆括号括起来参数类型列表以及一个返回类型...常用高阶函数 Kotlin提供了很多高阶函数,这里根据这些高阶函数所在文件位置,分别进行介绍,先来看一下常用高阶函数,这些高阶函数在Standard.kt文件。...区别是T.run()是作为泛型T一个扩展函数,所以在传入lambda表达式可以使用this关键字来访问这个泛型T成员变量成员方法。

1.1K20

Kotlin函数作为参数,T.()->Unit ()->Unit 区别

在做kotlin开发,经常看到一些系统函数里,用函数作为参数,但是又和我们自己写不太一样 大概是这样子: public inline fun T.apply(block: T....我们这里来看一下文档是怎么说, ? 输入图片说明 我们这里看一下画原谅色线部分,原来这里作用就是可以this代表对象不同。...---- 我们首先定义两个函数: fun T.afterMersure(f: T.() -> Unit) { } fun T.afterMersure2...(f: () -> Unit) { } 这两个函数是用于,View测量完成之后回调。...,这两个函数唯一区别就是T.()-Unit与()->Unit区别,我们调用时,在代码块里面写this,时候,根据代码提示,我们可以看到,连个this代表含义不一样,T.()->Unit里this

2.1K30

kotlin Standard内联函数示例详解

let、with、run、apply、also、takeIf、takeUnless、repeat函数使用 kotlin Standard.kt文件,提供了一些内联函数,这些内联函数可以减少代码量,...观察函数定义可以发现,run函数为一个扩展函数,而其接受参数with函数第二个参数相同,run函数可以理解为let函数with函数结合体。...address } 适用范围: 适用于letrun函数场景,run函数相较于let函数省去了必须适用it指代参数麻烦,相较于with函数弥补了对象判空问题 also also函数定义如下...总结: 这里我们总结对比一下这五个函数,这五个函数特性非常简单,区别也无非是接受参数返回类型不同。...结语: Kotlin Standard.kt标准库函数已基本讲解完毕,其中涉及到了高阶函数lambda函数,相关知识可通过官方文档学习,同时建议读者将每个函数都实际敲一遍,并通过查看他们编译后

65810

Kotlinsam(函数式接口)详解

OnClickListener接口只有一个抽象方法,这种接口在kotlin中被当作函数式接口,或者SAM接口,SAM代表单抽象方法,类似的还有像RunnableCallable这样函数式接口....SAM构造方法:显式地把lambda转换成函数式接口. 在有的方法需要返回一个函数式接口,不能返回一个lambda, 可以用SAM构造方法把它包装起来....如下 fun createAllDoneRunable() : Runnable{ return Runnable{ println(“All done”) } } SAM函数名称底层函数式接口名称一样...SAM构造方法只接收一个参数-一个被用作函数式接口单抽象方法体lambda,并返回一个接口类实例....另外除了返回值通过lambda创建函数式接口外,也可以把lambda生成函数式接口放在一个变量,如下 val listener = OnClickListener{ view - val text

1.7K40

Kotlin内联函数作用是什么?

在以前,因为学过一段时间Kotlin(并没有实际开发中用过),很多东西都忘记了,但是kotlin代码看起来其实Java没什么区别,感觉都差不多。所以不要认为 Kotlin 很难学。...首先,什么是内联函数 inline? Kotlin内联函数属于Kotlin高级特性之一,使用起来也非常简单。...没加 inline 之前 加上 inline 之后 解释就不用多说了吧,kotlin 自动帮我们将方法在编译期就加在了相应调用处,免除了 java 入方法栈与退栈。...非局部返回标记 为了不让lamba表达式直接返回内联函数,所做标记 相关知识点:我们都知道,kotlin,如果一个函数,存在一个lambda表达式,在该lambda不支持直接通过return...reified java,不能直接使用泛型类型 kotlin可以直接使用泛型类型 inline fun startActivity() { startActivity(Intent(this

1.3K10

Kotlin扩展函数与属性示例详解

前言 Kotlin 扩展方法并不是在原类内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式,对源类实例操作和包装,其实际相当于我们在 Java定义工具类方法,并且该工具类方法是使用调用者为第一个参数...不管String类是用Java、Kotlin,或者像Groovy其他JVM语言编写,只要它会编译为Java类,就可以为这个类添加自己扩展。 在这个扩展函数,可以像其他成员函数一样用this。...Kotlin允许用导入类一样语法来导入单个函数: import strings.lastChar //星号导入 import strings.* 3.3.2在Java调用扩展函数 其实,扩展函数是静态函数...调用扩展函数,不会创建适配对象或者任何运行时额外消耗。 这使得从Java调用Kotlin扩展函数变得非常简单:调用这个静态函数,然后把接收对象作为第一个参数传进去即可。...假设它声明在一个叫做StringUtil.kt文件: char c = StringUtil.lastChar("Java"); Kotlin版本比较起来,可读性略差。

1.3K20

Kotlin高阶函数(一等公民)

下面我们来说说 Kotlin高阶函数 Kotlin 不是纯粹面向对象语言, Kotlin 函数也是一等公民,因此函数本身也具有自己 类型 。...函数类型就像前面介绍数据类型一样,既可用于定义变量,也可用作函数形参类 型,还可作为函数返回值类型 使用函数类型 Kotlin 每个函数都有特定类型,函数类型由函数形参列表、 ·>返回值类型组成...fun test() { .... } 该函数形参列表、 ·>返回值类型为() ->Unit 或(),这就是该函数类型 。...使用函数类型作为形参类型 Kotiin 支持像使用其他类型一样使用函数类型,因此完全可以在函数定义函数类型形 参 例子 //定义函数类型形参,其中 fn 是( Int )→ Int 类型形参 fun...着每次调用函数时都可动态传入一个函数,随着实际传入函数改变,就可以动态改变 map() 函数部分计算代码 。

66110

Kotlin 上手记 —— 变量、函数类型

Kotlin 变量、函数类型 先看原文章:https://kaixue.io/kotlin-basic-1/ 思考题 1. 子类重写父类 override 函数,能否修改它可见性?...private 类可见 文件可见 就这么四种可见性,经过真正尝试,是可以将子类可见性放开,比如就是说,父类可见性是 protected,子类同样可以是 protected,或者改写成 public...as 是强转关键字,如果强转类型操作是正确当然没问题,但如果强转成一个错误类型,程序就会抛出一个异常。需要进行安全强转,Kotlin 在设计上考虑到了优雅处理强转出错情况,就是使用 as?...使用 Android Studio 创建一个基于 Kotlin 新项目(Empty Activity),添加一个新属性(类型是非空 View),在 onCreate 函数初始化它。...类型方法,传入刚才 View 类型属性,并在该方法打印出该 View? id。

62420

Kotlin学习之路(4)函数运用

public 表示该函数为公共方法,而Kotlin默认就表示函数是公开,所以省略了关键字 ③ Java使用 void表示该函数没有返回值,而Kotlin没有关键字void ,若没有返回值不用特别声明...④ Kotlin 新增了关键字 fun,这个fun类似Java 关键字class ⑤ Java声明输入参数格式 “变量 变量名称”而Kotlin 前面说过参数命名 “变量名称:变量类型” ⑥...在Java体系,可变参数可以采用“Object…args”形式。但是在Kotlin中新增了关键字vararg,表示其后面的参数个数不确定。...以可变字符串为例 Java写法“String…args”,而Kotlin写法“vararg args:Sting?”,函数内部解析时候,Kotlin会把可变参数当成一个数组。...如果要让该方法同事接收整型双精度数组入参,那就得使用泛型T 来自于基类Number 将改为,同时在fun前面加上关键字inline,表示该函数属于内联函数

72810
领券