Kotlin笔记 第六章 (一)函数.md

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Leslie_LN/article/details/82805077

函数

1、函数定义

格式:

		fun 函数名(数据类型 形参1,....):返回值类型{


			......
		return...




		}
  1. 当没有返回值时,直接省略掉":返回值类型"即可或者使用":Unit"声明(Unit相当于Java中的void)代表没有返回值

1.1、形参默认值

除了返回值写法和Java中外,Kotlin中形参允许可以有默认值

针对以上具体函数为例:

	fun test(name:String="lelsie",age:Int):Person{

	。。。。。。。

	return ....

	}

当没有返回值时:

fun test(name:String="lelsie",age:Int):Unit{

		。。。。。。。

		

		}

或者

fun test(name:String="lelsie",age:Int){

		。。。。。。。

		

		}

2、函数调用

java中方法调用时使用位置参数,即形参和实参一一对应,Kotlin除了使用java中这种传统位置参数调用,还可以使用命名参数(“外部形参数名=值”)形式调用,甚至还可以使用这两种混合方式

  1. 位置参数调用
  2. 命名参数调用
  3. 位置参数和命名参数混合调用(所有位置参数必须位于命名参数之前,即命名参数后都是命名参数了)

注意:

  1. 所有位置参数必须位于命名参数前,即第一个参数如果使用命名参数,那么后面的参数如果要传值(比如后面形参指定了默认值)也必须使用命名参数),特殊情况比如使用命名参数方式这个形参后形参都定义了默认值,调用时也使用默认值即不用传任何值

外部形参:和方法定义的形参名一样

内部形参:方法定义的形参名

fun testName(age:Int=10,name:String,studentNO:Int){

	Log.d("TAG","name=${name},age=${age}")

}

调用:testName(name = “leslie”,1)该种方式[第一个参数用命名参数方式,第二个参数不传实参使用默认值,第三参数使用位置参数]即会报错,上面我们说了位置参数必须在命名参数前,这里第一个参数就用名参数方式,所以后面的形参也要赋值时就必须也以命名参数方式:比如:testName(name=“lelsie”,studentNo=12);

如果只使用位置参数调用,但是形参都有默认值情况:

fun testName(name:String=“leslie”,age:Int=10,studentNO:Int=12){

	Log.d("TAG","name=${name},age=${age}")

}

调用:testName(1)将报错,因为默认是赋值给第一个参数的,而第一个参数是String类型

  1. 只传一个值时,默认赋值给第一个形参
  2. 如果第一个形参有默认值,后面的形参没有默认值,仅只使用位置参数,那么必须为前面的默认值形参传值,否则就会报错,但是这样也就失去默认值的意义;因此如果要要传多个值(但有不是为所有的值传值),必须使用位置参数和命名参数混合的方式如:testName(“lin”,studentNO=20),一般建议将有默认值形参放在最后,这样可以避免只是用位置形参传参时,不用再为默认值形参再重复传值;

2.1、可变形参

形式:vararg 形参名:数据类型

首先,一个方法中最多只能有一个可变形参,但和java中要求不同的是***可变形参可以位于形参任意位置,而不是只能位于形参列表的最后位置***

当可变形参位于形参列表第一个时:后面的其他形参必须使用命名参数方式

fun vararg(vararg books:String,num:String){
for (book in books){
Log.d(“TAG”,book)
}

可变参数实质就是一个数组,当将数组元素传给可变性参时,在数组前添加"*"

3、单表达式函数

函数只返回单个表达式,可以省略{}并在“=”后指定函数体既可。表达式的值即为返回值

如:

	fun area(x:Double,y:Double):Double=x*y

4、函数重载

要求:

  1. 函数名相同
  2. 参数列表个数不同或者参数列表个数相同但是参数类型不同

猜你喜欢

转载自blog.csdn.net/Leslie_LN/article/details/82805077