Kotlin学习笔记(三):函数与Lambda表达式

函数

函数声明

在Kotlin 中的函数使用 fun 关键字声明:

	fun eat(food: Food){}

函数重写

override 写在方法前面,用来说明此方法是继承父类,重写的方法:

	override fun onCreate(savedInstanceState: Bundle?) { } 

函数重载

在同一个类中,方法名相同,参数列表或参数类型不同的多个函数,叫做函数重载

	class InitOrderDemo(name: String) {
		fun chengFa(a: Int,b: Int) : Int = a*b
		fun chengFa(a: Double,b: Double) : Double = a*b
	}

函数返回值

如果函数没有指明返回值,它就会返回Unit(可以不写,默认为Unit),与Java中的 void 类似,但 是 Unit 是一个真正的对象。

Kotlin中具有代码体的函数必须始终显式指定返回类型。 Kotlin 不推断具有代码体的函数的返回类型,因为这样的函数在代码体中可能有复杂的控制流。

	fun add(x: Int, y: Int) : Int { 
		return x + y 
 	}
 
 	fun get(i: Int){
		val list = listOf<String>("1", "2", "3")
		val s = list.get(i)
		println(s)
 	}

当函数有返回值是,以使用一个表达式计算出来,这时不使用括号而是使用等号:

	fun add(x: Int,y: Int) : Int = x + y 

函数参数

Kotlin中的函数与java不同,函数的参数先写名称,后写类型

	 fun add(x: Int,y: Int)

默认参数

可以给参数指定一个默认值使得它们变得可选,第二个参数指定了一个默认值。这意味着调用的时候可以传入第二个值或者不传,这样可以避免你需要的重载函数:

	 fun max(a: Int,b: Int = 2){
		println(a+b)
	}

当子类继承父类,重写父类带有默认值参数的方法时,重写的方法不能带默认值,如下:

	open class A {
		open fun foo(i: Int = 10) { …… }
	}
	
	class B : A() {
    		override fun foo(i: Int) { …… }  // 不能有默认值
    	}

函数调用

使用参数名字来调用函数时,甚至可以通过使用参数名字来调用
这表示你可以通过在值前,写明参数名来传入你希望的参数,如下:

	val max = max(2,b = 3)

调用成员函数使用点表示法:

	Person().eat() // 创建 Person类实例并调用eat方法

扩展函数——中缀函数

用 infix 关键字修饰的函数,可以使用中缀表示法,即在调用函数时忽略该调用的点与圆括号,如下:

	infix fun Int.shl(x: Int): Int { ... }
	// 用中缀表示法调用该函数
	1 shl 2

	// 等同于这样
 	1.shl(2)

中缀函数必须满足以下要求:

  • 中缀函数必须是成员函数或扩展函数;
  • 中缀函数有且只有一个参数;
  • 中缀函数中的参数不可以是可变数量的参数而且不能有默认值

to函数就是一个中缀函数

 	fun train(){
		val t1 = "北京" to "上海"
		val t2 = "北京" . to("上海")
		println( t1 )
		println( t2 )
	}

扩展函数——解构声明

有时把一个对象 解构 成很多变量会很方便,例如:

	val (name, age) = person

这种语法称为 解构声明 。一个解构声明同时创建多个变量。 我们已经声明了两个新变量:name 和 age,并且可以独立使用它们。

上面的解构声明会在编译时被编译成以下代码:

	val name = person.component1()
 	val age = person.component2()

要使用 解构声明 需要在创建类的构造函数中初始化每个变量,将调用名为 componentN 的函数,其中N是声明中变量的位置。componentN() 函数需要用 operator 关键字标记,以允许在解构声明中使用它们:

	class Person(var name: String, var age:Int) {
		operator fun component1()  = name
		operator fun component2()  = age
	}

扩展函数

举个例子,在下面的这个代码中,我们给Int类加了一个扩展函数:

	fun Int.ChnegFa(a: Int , b: Int) = a*b

	fun a (){
		121.ChnegFa(12,15)
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值