再见kotlin--02函数

零、前言

玩java也有一段时间了,个人还是非常喜欢java的。
对Kotion也有层有耳闻,以前也接触过写语法,写起来感觉有点像js,和python,又有种食之无味,弃之可惜的感觉,最后还是搁下了。
久了不用也忘得差不多了,现在重拾一下,写些笔记记录一下。


函数作为编程语言中的可复用单元,对编程的简化起到至关重要的作用。
kotlin作为函数是一等公民的一种编程语言,函数似乎成了最闪耀的明星。

一、语法的定义

1.kotlin语法之----函数定义(万变不离其宗)
fun 函数名(变量1:变量类型|n+):返回值类型{
    函数体
    return 
}

/**
 * 计算矩形面积
 */
fun area(x: Double, y: Double): Double {
    println("x=${x}  y=${y}")
    return x * y
}


2.函数调用的四种方式
area(y = 5.0, x = 3.0) //x=3.0  y=5.0
area(x = 5.0, y = 3.0) //x=5.0  y=3.0
area(5.0, y = 3.0) //x=5.0  y=3.0
area(5.0, 3.0) //x=5.0  y=3.0

3.函数默认参数
fun area(x: Double, y: Double = 1.0): Double {
    println("x=${x}  y=${y}")
    return x * y
}
area(3.0) //x=3.0  y=1.0

4.单表达式函数:相当于对上面的简写形式
/**
 * 单表达式函数
 */
fun area(x: Double, y: Double) = x * y

5.变参测试---vararg
/**
 * 变参测试
 */
fun printAll(vararg names: String) {
    for (i in names.indices) {
        print("${i }"+" ")
    }

    for (name in names) {
        print("${name }"+" ")
    }
}
printAll("Hello", "toly,", "I", "am", "fine!")
//0 1 2 3 4
//Hello toly, I am fine! 

6.局部函数
/**
 * 计算图形边长
 */
fun lenOfShape(vararg els: Double): Double {

    fun circle(r: Double): Double {
        return r * 2 * Math.PI
    }

    fun square(x: Double, y: Double): Double {
        return 2 * (x + y)
    }

    fun all(all: DoubleArray): Double {
        return all.sum()
    }

    return when (els.size) {
        1 -> circle(els[0])
        2 -> square(els[0], els[1])
        else -> all(els)
    }
}
println(lenOfShape(10.0)) //pi*2*10=62.83185307179586
println(lenOfShape(10.0, 25.0))//(10+25)*2=70.0
println(lenOfShape(10.0, 20.0, 30.0))//10.0+20.0+30.0=60

7.定义函数变量

你没看错,kotlin中函数是一等公民,也是一种数据类型,可以当做一个变量赋值或传参

//定义函数变量
var funV: (Double, Double) -> Double
//函数变量赋值
funV = ::area
//使用函数变量
println(funV(3.0, 3.0))//9

8.lambda表达式
fun main(args: Array<String>) {
    //将lambda表达式赋值给变量
    var square = { n: Int ->
        n * n
    }
    
    println(square(9))//8*8

//    var square = { n: Int ->
//        n * n
//    }(9)//可以在尾部调用

    //
    var res = { base: Int, exp: Int ->
        var result = 1
        for (i in 1..exp) {
            result *= base
        }
        result
    }

    println(res(5, 4))//5*5*5*5=625
}

后记、

1.声明:

1----本文由张风捷特烈原创,转载请注明
2----欢迎广大编程爱好者共同交流
3---个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4----你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

原文地址:https://www.cnblogs.com/toly-top/p/9781862.html