Koltin
1 函数表达式
fun add(x1:Int,x2:Int):Int = x1 + x2
fun main(args : Array<String>){
var num1 = add(3,5)
println(num1)//8
var num2 = {x1:Int,x2:Int -> x1+x2}
var res = num2(2,1)
println(res)//3
var num3:(Int,Int)->Int = {x1,x2->x1+x2}
var res2 = num3(5,6)
println(res2)//11
}
2 函数引用和匿名函数
函数的优化,但是只可以是return一行不可以多行。
scala可以有多行。
可以将函数赋给另一个函数名称。
var pdd = :: add
println(pdd(4,5))
3 默认参数和具名参数
set("www.baidu.com","POST")
set("www.baidu.com")
set(path="www.baidu.com",method="POST")
set(path="www.baidu.com")
set(method="POST",path="www.baidu.com")
}
//解决java中重载过多的问题
fun set(path:String,method:String = "GET"){
println("path = ${path}, method = ${method}")
}
结果
path = www.baidu.com, method = POST
path = www.baidu.com, method = GET
path = www.baidu.com, method = POST
path = www.baidu.com, method = GET
path = www.baidu.com, method = POST
4 可变参数
kotlin中的可变参数:
fun main(args: Array<String>) {
var a = 10
println(add(1,2,3,4,5,6,7,8,9,10))
}
//可变数组
fun add(vararg a:Int):Int{
var res = 0
a.forEach {
res += it
}
return res
}
java中的可变参数:
public class 可变参数Demo {
public static void main(String[] args) {
System.out.println(add(1,1,2,3,4,5,6,7,8,9,10));
}
public static int add(int...a){
int res = 0;
for(int i :a){
res += i;
}
return res;
}
}
5 递归函数
fun main(args: Array<String>) {
println(digui(5))
println(fbnq(4))
}
fun digui(num:Int):Int{
if (num == 1){
return 1
}else{
return num*digui(num-1)
}
}
fun fbnq(num: Int):Int{
if ( num == 1 ||num == 2){
return 1
}else{
return fbnq(num - 1) + fbnq(num - 2)
}
}
结果
120
3
6 尾递归优化
尾递归:递归中没有任何别的操作,就只有递归操作
优化:在递归函数前方加上tailrec
tailrec fun add3(num:Int,res:Int = 0):Int{
if(num == 1){
return 1 +res
}else{
return add3(num - 1,res + num)
}
}
尾递归优化可以将递归优化为迭代,可以进行更高的数字进行递归