Kotlin入门(二)——函数fun
来源:互联网 发布:文字变声音软件 编辑:程序博客网 时间:2024/05/18 00:53
官网
官网链接。
定义
函数通过fun关键字进行定义。
参数
参数的定义形式为:name: type。
参数默认值
每一个参数都可以有默认值。如:
fun main(args:Array<String>){println(test(2))}fun test(a:Int,b:Int = 3):Int{//b的默认值是3,所以调用的时候可以只传一个值,该值会被赋值给a。return a+b}有默认值的参数也可以被赋值。同时也可以通过参数名=值的方式为指定的参数进行赋值。如:
fun main(args:Array<String>){reformat("hhh",wordSeparator="xxx")//为指定的参数进行赋值}fun reformat(str:String, divideByCamelHumps:Boolean = false, wordSeparator:String = "_"){println(str+wordSeparator+divideByCamelHumps)//hhhxxxfalse}
reformat定义了三个参数,后面两个无默认值。在调用的时候,通过参数名为指定的wordSeparator参数进行赋值;而divideByCamelHumps没有被赋值,所以它的值是默认值。
可变参数vararg
通过vararg关键字定义可变参数。可以将可变参数当作一个数组进行处理。要注意的是:一个函数只能有一个可变参数。但可变参数不一定是最后一个参数。如下:
fun test(vararg a:String,b:String){for(t in a){println(t)}println(b)}test("fdaf","fdaf2","fda3",b="00fdaf")//调用方式
参数a为可变参数,但它并不是第一个参数。
在调用时,通过参数名=值的方式为参数b进行赋值,不然赋的值会传递到可变参数a中。
将上述kt文件编译成的class打开,可发现该函数对应的java代码如下:
从中可以看出,可变参数a已经变成了String数组。
泛型
通过<>指定泛型类型,并且泛型写在函数名之前。
函数
infix notation
fun main(args:Array<String>){println("11".test("22"))}infix fun String.test(a:String):String{return this+a //使用this代表调用者的值}
top level函数
Kotlin中,不需要将函数定义在一个类中(这样的函数叫top level函数),它可以直接定义到任何一个kt文件中——外层不需要包裹一层class。当然,这只是写法的区别,实际上在转成class文件之后,该函数依旧是一个类的成员函数。如下是一个a.kt的源码:
fun main(args:Array<String>){test("fdaf","fdaf2","fda3",b="00fdaf")}fun test(vararg a:String,b:String){for(t in a){println(t)}println(b)}
test与main函数是没有定义到任何类的内部,打开该文件编译成的class文件,如下:
可以发现在对应的java文件中,在外层生成了一个类名为AKt的类,并将所有的函数都定义到该类中。
局部函数(local function)
一个函数可以定义在另一个函数的内容。如下:
fun test(vararg a:String,b:String){fun inner(i:String){//定义在另一个函数的内容println(i+","+b)}inner("___inner__")//直接调用该内容函数}
查看其对应的class文件,可发现内部函数会被转成Lambda对象的成员函数。如下:
从中也可以看出,局部函数也只有其外层的函数可以访问到,别的地方无法访问。
成员函数
函数可以定义在一个类的内部。同java一样。
单语句函数
当函数体只有一个表达式时,可以省略大括号,并将函数体定义在返回类型后面,并通过等号连接。如下:
fun test(a:Int,b:Int = 3):Int = a*b该函数的函数体只有一个表达式a*b,所以可以将大括号省略,并用等号连接。
同时,该函数的返回值类型也可以省略。如下:
fun test(a:Int,b:Int = 3) = a*b//省略了返回值类型单语句函数不需要写return。
返回值
返回值写在参数括号后面,以冒号分开。如下:
fun test(a:Int,b:Int = 3):Int{//返回Int类型return a+b}如果一个函数没有返回值,可以将它返回值类型写成Unit,并且该返回值类型可以省略。
- Kotlin入门(二)——函数fun
- Kotlin学习记录(二)—— Kotlin的变量、属性、类、构造函数、继承、方法
- kotlin入门(二)数据类型
- Kotlin基础入门(二)
- Kotlin学习总结(1)——Kotlin快速入门
- Kotlin 从入门到实战(二)
- 一周入门Kotlin(二)
- Kotlin入门(四)——类
- Kotlin——函数
- Kotlin笔记(二)——数据类型
- Kotlin入门篇(二),如何声明函数和处理空值
- kotlin入门(八)函数
- Kotlin笔记(三)——函数
- Kotlin语言学习之fun函数扩展使用
- Kotlin学习笔记(二)——示例篇二
- Kotlin——程序的灵魂组成之Lambda表达式、匿名函数、高阶函数的基本语法(二)
- Android Kotlin(一)—— Kotlin 入门与 HttpURLConnection 网络请求
- kotlin随笔—扩展函数
- java -version报错
- 动态联动select下拉框实现
- C#中sizeof用法
- 语音编码分类及编解码标准
- (67)音效编辑器界面
- Kotlin入门(二)——函数fun
- Android微信支付脱坑指南-CSDN(WXPay)
- Json的数组和对象获取值
- Singleton单例模式详解
- Shader 透明效果+纹理融合Code
- 1001.害死人不偿命的(3n+1)猜想
- C++/MFC-CHAR和WCHAR类型的相互转换
- 20170522 Vue.js入门
- request对象和response对象