Kotlin之基本函数和高阶函数

package net.edaibu.kotlintest.FunctionAndLambda


/**
 * @author geqipeng
 *
 * @date 2017/6/1
 *
 * @time 10:38
 */

//函数

//函数声明
fun method1(x: Int): Int {
    return x
}

//中缀符号 infix
infix fun Int.shl(x: Int): Int {
    return x
}

//参数  每个参数要声明数据类型
fun parameterTest(p1: Int, p2: String, p3: Double) {
    println(p2 + p3 + p1)
}

//参数   设置默认值
fun parameterTest2(p11: Int = 0, p22: String = "", p33: Double = 1.5) {
    println(p22 + p11 + p33)
}
//命名参数

fun nameParameter(age: Int = 2, name: String = "pater") {
    println("name=" + name + ",age=" + age)
}

//无返回值参数
fun noReturnValue(name: String?): Unit {
    if (name != null) {
        println("$name")
    } else {
        println("no name")
    }
}

//单表达式函数
fun singleFunction(x: Int) = x * x

//变长函数 用vararg修饰符修饰
fun <T> alertableParameter(vararg test: T): List<T> {
    var result = arrayListOf<T>()
    for (t in test) {
        result.add(t)
    }
    return result
}

//局部函数
fun outer(outerVar: Int) {
    println("我是外部方法")
    fun inner(innerVar: Int) {
        println("我是内部方法")
    }
}

//成员方法
class MemberTest() {
    fun member() {
        println("成员方法")
    }
}

//泛型函数
fun <T> genericity(item: T): ArrayList<T> {
    return arrayListOf<T>()

}

//高阶函数和lambda表达式
//tailrec类似java递归

tailrec fun findFixPoint(x: Double = 1.0): Double = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
//第二种写法
fun findFixPoint2(): Double {
    var x = 1.0
    while (true) {
        var y = Math.cos(x)
        if (x == y) return y
        x = y
    }
}

fun main(args: Array<String>) {
    //函数调用
    println(method1(5))  //5

    println("中缀符号————————————————————————————————————————————————")
    println(1 shl 2)    //4   1*2^2
    println(1 shl 3)    //8   1*2^3
    println(2 shl 3)    //16  2*2^3
    println(1 shl (2))  //4   1*2^2
    println(2 shl (2))  //8   2*2^2

    println("参数——————————————————————————————————————————————————")
    parameterTest(1, "哈哈", 1.5)  //哈哈1.51  字符串自动拼接
    parameterTest2(2, "2", 3.0)   //223.0

    println("命名参数————————————————————————————————————")
    //name=java,age=5     java用法
    println(nameParameter(5, "java"))     //name=java,age=5

    //  kotlin命名参数用法,可以指定参数名字进行赋值,简单
    println(nameParameter(5, name = "jack"))  //name=jack,age=5

    println("noReturnValue__________________________________________")
    noReturnValue("peter")    //peter


    println("singleFunction_________________________________")
    println(singleFunction(10))    //100

    println("变长函数————————————————————————————————————————————————")
    println(alertableParameter(1, 2, 3, 4))   //[1, 2, 3, 4]
    println(alertableParameter(1, "haha", 3.0f, "c"))   //[1, haha, 3.0, c]

    println("成员方法——————————————————————————————————————————————————")
    println(MemberTest().member())   //成员方法


    println("泛型函数————————————————————————————————————————————————————————")
    println(genericity(100))    //[]


    println("尾递归函数——————————tailrec————————————————————————————————")
    //对比方法1和方法2输出结果一样
    println(findFixPoint(1.0))  //0.7390851332151607
    println(findFixPoint2())    //0.7390851332151607

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值