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

Kotlin入门(10)七十二输入参数

上一篇文章介绍了Kotlin函数基本用法,包括函数定义、输入参数声明、输出参数声明等等,这些足够对付简单场合了。...既然Kotlin志在取代Java,就必须练成Java所不具备功夫。本篇文章便从函数输入参数着手,谈谈Kotlin对输入参数改进与增强之处。...于是Kotlin引入了默认参数概念,允许在定义函数时直接指定输入参数默认值,如果调用函数时没有给出某参数具体值,系统就自动对该参数赋予默认值,从而免去了每次都要手工赋值麻烦。...为了解决这个不合理地方,Kotlin又引进了命名参数概念,说是调用函数时可以指定某个参数名称与数值,形如“参数名=参数值”这样。...另外,Kotlin对Java可变参数功能进行了增强,不但支持普通类型可变参数,而且支持数组类型可变参数。 点此查看Kotlin入门教程完整目录

52620

函数参数值和指针有什么区别?

因为函数参数在传递时候,都是原数据副本,也就是说,swap内部使用a和b只是最初始a和b一个副本而已,所以无论在swap函数内部对a和b做任何改变,都不会影响初始a和b值。...为什么又有值,又有指针 看到这里,不知道你是否会疑惑,为什么给函数传递参数时候,一会是值,一会是指针呢?为什么指针就能改变参数值呢?实际上,C语言里,参数传递都是值传递!...从图中可以看出,虽然传递给函数是指向a和b指针副本,但是它副本同样也是指向a和b,因此虽然不能改变指针指向,但是能改变参数a和b指向内容,即改变原始a和b值。...我们还是利用前面所知来分析,由于传递给getMemory函数参数都是一个副本,因此函数p也是外部p一个副本,因此即便在函数内部,将p指向了一块新申请内存,仍然不会改变外面p值,即p还是指向NULL...getMemory 总结 本文总结如下: 函数参数都是原数据“副本”,因此在函数内无法改变原数据 函数参数都是值,指针本质上也是值 如果想要改变入参内容,则需要该入参地址(指针和引用都是类似的作用

3K30
您找到你想要的搜索结果了吗?
是的
没有找到

go语言中函数参数值还是引用思考

于是乎,最近开始转向go编程,和以前写JAVA一样遇到了很多细节问题,以后有机会再多总结几篇,今天主要说一下go语言中,函数调用时参数值和引用问题。...C++函数参数值和引用 熟悉C++程序员们应该都清楚,C++里传递函数参数时候,值还是引用是函数声明时候决定。...go函数参数一律值 预声明类型如int,string等,以及普通命名结构类型没什么好说,无论是传递该类型值还是指针作为函数参数,本质上都是值,这点和C++一样。...网上有很多说法,听到最多是slice,map和chan作为参数传递到函数中时是引用,其实这个说法不准确,我们不能单纯因为函数内部修改可以反馈到外面就认为是传递引用,更何况这种看法还会带来一些语言陷阱...综上所述,对于go来说,函数参数传递其实都是方式,go里面真正涉及到引用概念,大概只有闭包里了,有兴趣同学可以去研究一下go闭包实现。

4.6K40

利用 kotlin 方式自定义回调事件(kotlin函数参数)

利用 kotlin 函数作为参数(强烈推荐) 来看一下系统点击事件在 kotlin 中是什么样: ? 是不是简直简洁到不像话?...2018.12.12 更新: 上边截图里 kotlin 点击事件回调,还有更简洁定义方法: ? 之前写法是声明不可为 null 函数变量,然后判断是否初始化再去 invoke 函数。...现在声明可为 null 函数变量,在 invoke 函数时候用 ?. 表示函数变量可空,如果没有给这个点击事件函数赋值的话,这行代码也不会引起 crash。现在连判断条件都不需要了,更精简了。...这里再说点个人经验,如果你回调方法不止一个的话,推荐还是声明 interface 来做,这样的话都在一个 interface 里边好管理一些 以上这篇利用 kotlin 方式自定义回调事件(kotlin...函数参数)就是小编分享给大家全部内容了,希望能给大家一个参考。

1.8K21

Kotlin函数 ⑨ ( Kotlin 语言中闭包概念 | Java 语言中函数作为参数替代方案 )

文章目录 一、闭包概念 二、Java 中函数作为参数替代方案 ( 匿名内部类 ) 一、闭包概念 ---- 匿名函数 就是 Lambda 表达式 , 同时也是 闭包 , 三者是相同概念 ; 闭包意义...在一个 脚本文件 中 , 如 Kotlin 脚本 , 就需要 使用 函数 进行作用域区分 , 将一个作用域内相关代码 , 都写在一个函数中 , 这样就可以将作用域分区分开 ; 匿名函数 作用域 :...参数 或 返回值 函数 ; 使用 匿名函数 / Lambda 表达式 / 闭包 作为 参数 / 返回值 函数 是 高级函数 ; Kotlin 中经常使用 链式调用 , 就是 函数式编程 风格...; 二、Java 中函数作为参数替代方案 ( 匿名内部类 ) ---- Kotlin 中引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 闭包 作为 函数参数 或 返回值 , 可以写出...更加灵活代码 ; Java 8 开始 支持 Lambda 表达式 , 但是 不支持 函数 作为参数 , 也 不支持将 函数 赋值给变量 ; Java 语言 将 函数 作为参数 替代方案 是 : 使用

97410

Kotlin】泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协 | in 逆 | reified 检查泛型参数类型 )

文章目录 一、泛型类 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 六、可变参数 vararg 关键字与泛型结合使用 七、使用 [] 运算符获取指定可变参数对象 八、泛型 out 协...---- 函数 参数 或 返回值 类型为 泛型类型 , 则该函数称为 泛型函数 ; 代码示例 : 该代码中 , 泛型函数 logT 参数 和 返回值 都是 T 泛型参数 类型 ; class...---- 泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 参数返回值 都是泛型 的话 , 在该泛型函数 中可能需要使用多个泛型 , 使用不同字母表示不同泛型 ; 如果函数中 引入了新泛型类型...八、泛型 out 协 ---- 使用 out 关键字 , 可以使 子类泛型对象 赋值给 父类泛型对象 ; 在 泛型类 中 , 如果只将 泛型类型 作为 函数返回值 类型 , 则在 声明 泛型参数...在 Java 中 , 运行时 不知道 泛型参数 具体类型 ; 在 Kotlin 中可以 通过 reified 关键字检查 泛型参数类型 ; Java 中如果想要知道 泛型参数 具体类型 , 通过常规方法无法实现

3.7K10

软件测试|Python函数参数之必参数、默认参数、可变参数、关键字参数详细使用

图片在Python中,函数参数是定义在函数头部变量,用于接收传递给函数数据。Python函数参数有四种类型:必参数、默认参数、可变参数和关键字参数。每种类型都有不同使用方式和适用场景。...Python函数参数类型必参数:最常用,必确定数量参数默认参数:在调用函数时可以也可以不,如果不将使用默认值可变参数:可变长度参数关键字参数:长度可变,但是需要以 key-value 形式参必参数参数是指在调用函数时必须提供参数...函数有两个参数,第一个参数是 a,第二个参数是 b传入两个整数按照位置顺序依次赋给函数参数 a 和 b,参数 a 和参数 b 被称为位置参数注:传递参数个数必须等于参数列表数量根据函数定义参数位置来传递参数...注:声明函数时,当同时存在必参数和默认参数,形参顺序必须是 (必参数 , 默认参数),不能默认参数在前可变参数可变参数是指在函数定义时不确定参数个数情况下,可以接收任意数量参数。...必参数在调用函数时必须提供,没有默认值;默认参数函数定义时给参数赋予一个默认值,在调用函数时可以不传递该参数;可变参数可以接收任意数量参数,使用星号(*)和双星号(**)来定义;关键字参数通过指定参数名来传递参数

34620

Kotlin 内联函数和 Reified 类型参数原理与运用

概要 本文将深入探讨 Kotlin 中内联函数和 Reified 类型参数工作原理,并提供详细示例以帮助读者更好地理解这两个高级功能。...Reified 类型参数原理 在普通泛型函数中,类型参数信息在编译后会被擦除,这意味着在运行时无法获取泛型类型实际信息。...使用 Reified 类型参数 reified 关键字允许我们在函数内部获取类型参数实际类型信息,而不仅仅是编译时类型。这使得在运行时执行类型检查和反射操作成为可能。...reified 关键字允许编译器保留类型参数实际类型信息,因此可以在运行时使用 T::class 访问。 运用示例 理解内联函数和reified类型参数实际运用对于更好地应用它们至关重要。...结论 内联函数和 reified 类型参数Kotlin高级功能,对于性能优化和类型安全反射非常有用。深入理解它们工作原理有助于开发者更好地运用它们来解决实际问题。

26120

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

2K30

Kotlin Primer·第二章·基本语法

switch,但是 Kotlin 更加智能,可以自动判断参数类型并转换为响应匹配值。...:{ //... } 2.3 函数 2.3.1 函数声明 函数使用关键字fun声明,如下代码创建了一个名为say()函数,它接受一个String类型参数,并返回一个String类型值...){ } 2.3.3 函数 同 Java 变长参数一样,Kotlin 也支持变长参数 //在Java中,我们这么表示一个变长函数 public boolean hasEmpty(String......你可以给父类添加一个方法,这个方法将可以在所有子类中使用 例如,在 Android 开发中,我们常常使用这样扩展函数: fun Activity.toast(message: CharSequence...2.3.5 将函数作为参数 Kotlin 中,可以将一个函数作为参数递给另一个函数 fun lock(lock: Lock, body: () -> T ) : T { lock.lock

37810

python中如何定义函数传入参数是option_如何将几个参数列表传递给@ click.option…

如果通过使用自定义选项类将列表格式化为python列表字符串文字,则可以强制单击以获取多个列表参数: 自定义类: import click import ast class PythonLiteralOption...Syntax Tree模块将参数解析为python文字....自定义类用法: 要使用自定义类,请将cls参数递给@ click.option()装饰器,如: @click.option('--option1', cls=PythonLiteralOption,...这是有效,因为click是一个设计良好OO框架. @ click.option()装饰器通常实例化click.Option对象,但允许使用cls参数覆盖此行为.因此,从我们自己类中继承click.Option...并过度使用所需方法是一个相对容易事情.

7.7K30

Unit 为啥还能当函数参数?面向实用 Kotlin Unit 详解

直到这两年,大家发现 Compose 官方示例代码里竟然有把 Unit 填到函数参数情况: LaunchedEffect(Unit) { xxxx xxxxxx xxx } 我们才觉得...所以在结构上,Unit 并没有任何特别之处,它就只是一个 Kotlin object 而已。除了对于函数返回值类型和返回值自动补充之外,Kotlin 对它没有再施加任何魔法了。...例:函数类型函数参数 同样,这种去特殊性对于 Kotlin 函数式编程也提供了方便。...一个函数函数类型参数,在函数调用时候填入实参,只要符合声明里面的返回值类型,它是可以有返回值,也可以没有返回值: fun runTask(task: () -> Any) { when (...了解各种魔法背后实质,对于我们掌握和正确地使用一门语言是很有必要。 延伸:当做纯粹单例对象来使用 比如,知道 Unit 是什么之后,你就能理解为什么它能作为函数参数去被使用。

30320

Kotlin函数类型 ( 函数类型 | 带参数名称参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

函数类型 II . 带参数参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 函数类型 VII . 函数类型实例化 VIII ....函数类型 ---- 函数类型格式 : 圆括号中定义 参数类型列表 , 使用 -> 由参数列表指向返回值类型 , 表示接受 参数类型列表 中参数 , 返回 返回值类型 返回值 ; ( 参数类型列表 )...带参数参数列表 ---- 1 . 函数类型参数名称 : 参数列表中可以只是参数类型 , 也可以加上参数变量名称 , 参数名称可以用于说明参数含义 , 增加函数类型理解性 ; 2 ....复杂函数类型 : ① 参数返回值是普通类型 : 如果函数参数类型和返回值类型都是普通类型还好 , 解读起来不是很困难 ; ② 参数返回值是函数类型 : 如果函数类型参数类型或返回值类型中有函数类型...函数类型自动推断 ---- 1 . 变量类型推断 : Kotlin变量类型可以不用显示声明 , 可以根据其赋值类型进行智能类型推断 ; 2 .

2.6K10

Kotlin函数 ⑥ ( 函数参数为 Lambda 表达式 | Lambda 表达式作为参数简略写法 | 唯一参数简略写法 | 最后一个参数简略写法 )

) -> String , 是一个 函数类型 ; 函数类型变量 : 在 main 函数中 , 定义函数类型变量 actionFun , 之后 该变量会作为函数参数递给函数 , 同时使用了 匿名函数 ,..., age: Int -> ; 函数变量作函数参数 : 在最后 , 将 函数类型 变量 actionFun 传递给了 studentDoSomething 函数 , 作为其第三个参数使用 ; fun main...() { // 定义函数类型变量, 之后作为函数参数递给函数 val actionFun = { name: String, age: Int -> "student..., 会提示 Lambda argument should be moved out of parentheses 参数应该移出圆括号 Kotlin 建议我们移除 Lambda 表达式 外面的圆括号..., 不必使用 函数类型 变量名作为参数 , fun main() { // 定义函数类型变量, 之后作为函数参数递给函数 val actionFun = { name: String

48820

有关 Kotlin 具名参数形参参顺序导致输出结果发生改变问题一些探索

有关 Kotlin 具名参数形参参顺序导致输出结果发生改变问题一些探索 具名参数 众所周知,Kotlin 拥有一种叫做具名参数(Named arguments)特性,它在需要跳过可选参数,或是调整参数顺序地方十分有效...例如如下拥有五个参数,且后四个参数为可选参数函数: fun reformat( str: String, normalizeCase: Boolean = true, upperCaseFirstLetter...+i0, ++i0, ++i0) } private fun myPrint(a:Int,b:Int,c:Int){ println("a=a, b=b, c=$c") } myPrint 函数是一个很简单函数...在本例中,我们调用了三次 myPrint 函数,前两次通过提供具名参数方式调用,但两次传入具名参数顺序略有不同:一次是 a,b,c,一次是 c,b,a,第三个则很简单,直接按顺序传入了参数。...经过测试,我们得到了这样结果: a=1, b=2, c=3 a=3, b=2, c=1 a=1, b=2, c=3 这也就意味着,Kotlin 会按照传入具名参数顺序来传递实参,而不是按照形参顺序

63820

一文了解 JavaKotlin 中泛型

阅读本文你将了解:什么是型、协、逆和不型变在 Java 和 Kotlin 中如何实现以上型Java 和 Kotlin 中泛型异同在 Java/Kotlin 中,子类对象是可以赋值给一个父类类型...,把 dogs 传递给 getAnimalsCount 方法用于计算狗狗数量,这是一个特别合理需求,因为不型变性导致这类需求无法实现是 Java 所不愿看到,因此 Java 泛型通过通配符引入了协...,自然可以推导出到底什么时候可以编译通过了更多关于型特性背后设计原因,请参见我另一篇文章:Effective Kotlin 译文:Chapter3-Item24-泛型泛型约束Java 中还可以对泛型类型参数做进一步限制...泛型具体化(Reified)有时候我们需要在函数体中使用泛型类型参数,获取类型参数具体信息,比如对类型参数进行类型判断、类型转换等,因为类型擦除原因,这个在 Java 中是无法实现:public...clazzName = clazz.getName(); return clazz.cast(value);}但这显然不够优雅,在 Kotlin 中使用 inline 函数加上 reified 关键字可以实现将类型参数具体化

87420

一文了解 JavaKotlin 中泛型

阅读本文你将了解:什么是型、协、逆和不型变在 Java 和 Kotlin 中如何实现以上型Java 和 Kotlin 中泛型异同在 Java/Kotlin 中,子类对象是可以赋值给一个父类类型...,把 dogs 传递给 getAnimalsCount 方法用于计算狗狗数量,这是一个特别合理需求,因为不型变性导致这类需求无法实现是 Java 所不愿看到,因此 Java 泛型通过通配符引入了协...,自然可以推导出到底什么时候可以编译通过了更多关于型特性背后设计原因,请参见我另一篇文章:Effective Kotlin 译文:Chapter3-Item24-泛型泛型约束Java 中还可以对泛型类型参数做进一步限制...泛型具体化(Reified)有时候我们需要在函数体中使用泛型类型参数,获取类型参数具体信息,比如对类型参数进行类型判断、类型转换等,因为类型擦除原因,这个在 Java 中是无法实现:public...clazzName = clazz.getName(); return clazz.cast(value);}但这显然不够优雅,在 Kotlin 中使用 inline 函数加上 reified 关键字可以实现将类型参数具体化

1.1K52

Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin 类中 , 可以在 类声明 时 在 类名后...---- Kotlin 类只允许 在定义类时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ; 次构造函数 定义在 Kotlin 内部 , 可以定义 多个 次构造函数..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数中可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 在定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值..., 则 age 后参数需要写明参数名称 var hello = Hello("Tom", isStudent = true) println(hello.name + " , " +

4.8K20
领券