Kotlin 常用语法

条件控制 when

	//花括号可以省略
    when(i){
            1->doSomething()
            2,3->doSomething()
            4->{
                doSomething()
            }
            else->doSomething()n
        }

数组写法

  var intArray = arrayListOf(1,2,3)
  var strArray = arrayListOf("1","2","3")

Getter Setter

   class Student {
            var name: String=""
                get() {
                	//field 代表当前值
                    Log.w("Test", "get: $field")
                    return "get:$field"
                }
                set(value) {
                	//value 代表传进来的值,可自定义
                    Log.w("Test", "set: $value")
                    field = "set:$value"
                }
        }
        
   val s = Student()
   //调用set方法
   s.name = "Bob"
   //调用get方法
   Log.w("Test", "onCreate: ${s.name}")
输出
   W/Test: set: Bob
   W/Test: get: set:Bob
   W/Test: onCreate: get:set:Bob

实体类

//加上data,自动生成get set tostring copy hashcode equls方法
data class User(val name:String,val age:Int)

局部函数,扩展函数

class Person(var name: String, var sex: String)

//保存到数据库之前验证是否有字段为空
 fun savePerson(person: Person) {
    //局部函数
    fun validate(value: String, fieldName: String) {
//        if (value.isEmpty()){
//            throw IllegalArgumentException("Can't save person $fieldName is empty")
//        }
        //上面if判断的简写
        require(value.isNotEmpty()) { "Can't save person $fieldName is empty" }
    }
    validate(person.name, "name")
    validate(person.sex, "sex")
    //保存db
    Log.d("Test", "validateBeforeSave: save db")
}

//扩展函数判断
fun Person.validateBeforeSave() {
    //局部函数
    fun validate(value: String, fieldName: String) {
        require(value.isNotEmpty()) { "Can't save person $fieldName is empty" }
    }
    validate(name,"name")
    validate(sex,"sex")
    //保存db
    Log.d("Test", "validateBeforeSave: save db")
}

Lambda filter,map,with,applay

filter,map

        //sum 方法名 |----参数------|   |-函数体-|
        val sum =  { x: Int, y: Int ->  x + y   }
        println(sum(2, 4))
        //filter 取出偶数
        val list = listOf(1, 2, 3, 4)
        println(list.filter { it % 2 == 0 })
        //将值转为该值的平方
        val list1 = listOf(1, 2, 3, 4)
        println(list1.map { it * it })

输出结果:
在这里插入图片描述
with,aplly

with 返回的值是执行lambda代码的结果,该结果就是lambda中的最后一个表达式的值。
apply几乎跟with一模一样,区别是始终会返回作为实参传递给它的对象。

	//常规写法
 	fun alphabet(): String {
        val result = StringBuilder()
        for (letter in 'A'..'Z') {
            result.append(letter)
        }
        result.append("\nalphabet printed!")
        return result.toString()
    }
    //with写法,this可以省略
    fun withAlphabet(): String {
        val result = StringBuilder()
        return with(result) {
            for (letter in 'A'..'Z') {
                this.append(letter)
            }
            this.append("\nwithAlphabet printed!")
            this.toString()
        }
    }
	//with lambda写法
    fun withAlphabetLambda() = with(StringBuilder()) {
        for (letter in 'A'..'Z') {
            append(letter)
        }
        append("\nwithAlphabetLambda printed!")
        toString()
    }
	//apply lambda写法
    fun applyAlphabet() = StringBuilder().apply {
        for (letter in 'A'..'Z') {
            this.append(letter)
        }
        this.append("\napplyAlphabet printed!")
    }.toString()

输出结果:
在这里插入图片描述

“?:” 运算符

    fun foo1(s:String?):String{
        //如果s为空,则返回空字符串
        return s ?: ""
    }

    fun foo(s:String?)=s ?: ""

	//调用
	println("--->${foo(null)}")
    println("--->"+foo1("hi"))

在这里插入图片描述

“?.” 运算符

  var person: Person? = null
  //如果person为空,则不会调用方法
	person?.validateBeforeSave()

“let” 运算符

 	var s:String? = null
    fun changeStr(str: String) {
        //dosomething
    }
	//调用,如果s不为空执行fangfa,否则不执行
    s?.let { changeStr(it) }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值