这一节涉及的东西比较杂,各种函数和表达式,零零散散
package net.edaibu.kotlintest.FunctionAndLambda
/**
* @author geqipeng
*
* @date 2017/6/1
*
* @time 16:39
*/
//字面函数和函数表达式
//字面函数
fun findBigOne(a: Int, b: Int): Boolean {
return a > b
}
//函数文本语法
val sum1 = { x: Int, y: Int -> x + y }
//写法二
val sum2: (Int, Int) -> Int =
{ x, y -> x + y }
//函数表达式
fun getSum(x: Int, y: Int): Int = x + y
//函数表达式2
fun getSum2(x: Int, y: Int): Int {
return x + y
}
//函数表达式扩展
var sum = fun Int.(other: Int): Int = this + other
//数据类型智能转换
fun transfer(x: Any) {
if (x is String) {
println(x.length)
}
}
//函数引用
fun testQuote(num: Int) = num % 2 != 0
//属性引用
var xx = 1
//扩展属性
val String.lastChar:Char
get() = 'k'
fun main(args: Array<String>) {
println(getSum(10, 20)) //30
println(getSum2(10, 20)) //30
println("range_________________________")
//range
for (i in 1..5) {
println(i) //12345
}
println("if判断____________________________")
var i = 5
if (i in 1..5) {
println(i) //5
}
println("downto______________________________")
//逆序输出 downto
for (i in 4 downTo 2) {
println(i) //432
}
println("reverse————————————————————————————————————————")
for (i in (1..5).reversed())
println(i) //54321
println("is 表达式————————————————————————————————————————————")
//is表达式
if ("哈哈" is String) {
println("is string") //is string
}
println("智能转换——————————————————————————————————————")
println(transfer("hello kotlin")) //12
println("when表达式——————————————————————————————————")
var x: Any = 100
when (x) {
is Int -> print(x) //100
is String -> print(x.length)
}
println("运算符重载————————————————————————————————————————————————")
//运算符重载
var a = 10
var b = 20
//加
val c = a.plus(b)
//减
val d = a.minus(b)
//乘
val e = a.times(b)
//除
val f = a.div(b)
//取余
val g = a.mod(b)
print("__c=" + c + "_d=" + d + "_e=" + e + "_f=" + f + "_g=" + g) //__c=30_d=-10_e=200_f=0_g=10
//空安全
var n: String? = "hahaha"
n = null
//采用?符号进行为空判断即 n不为空才将n的长度赋值给m
val m = n?.length
println(m)
//函数引用 使用符号::来引用方法
println("函数引用——————————————————————————————————")
var list1 = listOf(1, 2, 3, 4)
println(list1.filter(::testQuote)) // [1, 3]
println("属性引用______________________________")
println(::xx.get()) //1
::xx.set(2) //通过set方法来进行赋值
println(::xx.get()) //2
println("扩展属性_______________________________")
println(String::lastChar.get("kotlin")) // k
}