条件控制 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) }