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
}
Kotlin之基本函数和高阶函数
最新推荐文章于 2022-08-01 00:22:24 发布