当前位置: 首页>移动开发>正文

kotlin aes解密 kotlin详解

1.kotlin在定义变量的时候 要给初始值

可以定义为null 但是要加? 但是后边使用这个变量的时候都是?.

kotlin aes解密 kotlin详解,kotlin aes解密 kotlin详解_内置函数,第1张

 

2.kotlin中的函数不依赖类存在 ,就是可以在类外写方法 Java中方法是依赖类存在的

kotlin aes解密 kotlin详解,kotlin aes解密 kotlin详解_内置函数_02,第2张

3. kotlin 的内置数据类型

String Char Int Double List Set Map

4.kotlin 的编译时常量

用关键词const val。声明的时候位置 不能在局部变量的位置

在函数内定义错误是因为 在运行时才能进行赋值 不符合要求 编译时常量 在编译时就要初始化

kotlin aes解密 kotlin详解,kotlin aes解密 kotlin详解_kotlin_03,第3张

5.range表达式 

for (i in 0..50){
            Log.d(TAG, "onCreate: i$i")
        }
        for (i in 0 until 50){
            Log.d(TAG, "onCreate:until i$i")
        }
        for (i in 50 downTo 1){
            Log.d(TAG, "onCreate:downTo i$i")
        }

6.函数的定义

val funAction = {number1, number2, number3 ->
    "第一个参数是$number1 第二个参数是$number2 第三个参数是$number3"
}
val funAction:(Int, Int, Int) ->String = {number1, number2, number3 ->
    "第一个参数是$number1 第二个参数是$number2 第三个参数是$number3"
}

println(funAction(1,2,3))

kotlin的匿名函数&lambda

匿名函数不要写return 最后一行就是返回值  如上边的例子  返回值就是一个string

it关键字

如果入参只有一个 可以等价于参数的变量名就是i

匿名函数等价于lambda表达式

在kotlin中定义入参是函数的函数

等价于java中的接口的简易实现

内联函数

如果有使用lambda作为参数 就需要将函数声明为内联  如果不使用内联 调用时就会生成多个对象 影响性能  内联的关键字 inline 调用时会直接调用 内部会做优化 会减少方法 对象的开辟 减少损耗

lambda属于函数类型的引用 具体可以看下边的例子

//第一种
fun main(args: Array<String>) {
    login("hzz","hzz"){message, code ->
        println("登陆结果为: message$message code$code")
    }
}
const val USERNAME = "hzz"
const val PASSWORD = "hzz"
inline fun login(name: String, password: String,
    response: (String, Int) -> Unit
) {
    if (name == USERNAME && password == PASSWORD){
        response("登陆成功", 200)
    }else {
        response("登陆失败", 404)
    }
}

//第二种
fun main(args: Array<String>) {
 /*   login("hzz","hzz"){message, code ->
        println("登陆结果为: message$message code$code")
    }*/
    login("hzz","hzz", ::responseResult)
}
const val USERNAME = "hzz"
const val PASSWORD = "hzz"
inline fun login(
    name: String, password: String,
    response: (String, Int) -> Unit
) {
    if (name == USERNAME && password == PASSWORD){
        response("登陆成功", 200)
    }else {
        response("登陆失败", 404)
    }
}

fun responseResult(msg: String, code: Int){
    println("登陆结果为: message$msg code$code")
}

对比我们上述代码中的  第二种实现方式 

::responseResult  就等价于第一种中的lambda表达式  所以说而  ::操作符则表明这是一个函数的引用

函数类型可以作为返回类型

fun showMethod(info: String): (String, Int) ->String{
        print("info = $info")
        return {name: String, age: Int ->
            "name$age"
        }
    }

同时我们还需要对比一下lambda表达式与函数

 lambda表达式是不需要return的 他的最后一行就是他的返回值  而函数 方法或者说函数的定义是需要返回值return的

7.对空的控制?, !!

8.内置函数

let函数
最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。
name?.let{
    将name 作为一个 it放入此的括号中
    "最后一行也就是我们的输出结果"
}
also内置函数
返回当前的这个对象,一般可用于多个扩展函数链式调用
name?.also{
    返回值类型跟info的类型一样  持有的时it  返回值是info本身
}
run内置函数
个人感觉跟let基本一样。但是由于参数是this 不像let调用属性的时候还需要it.  run函数可以直接属性名调用到
info.run{
    将info 作为this 传入括号  返回值根据最后一行变化
}
apply内置函数
一般的适用场景是在进行初始化赋值的时候
info.apply{
    始终返回的时info本身  apply持有一个this  this等同于info本身  返回值始终时info本身
}
takeif 内置函数 可以理解为takeIf是一个过滤器
info.takeIf{
    true/false
} //true的话返回info本身  false的话返回null   因为返回值有空 可以配合   ?:使用

 

 

 

 


https://www.xamrdz.com/mobile/4v71987431.html

相关文章: