Kotlin 常用语法篇
Posted Android开发中文站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 常用语法篇相关的知识,希望对你有一定的参考价值。
习惯用法和规范
类布局
-
属性声明与初始化块 -
次构造函数 -
方法声明 -
伴生对象
常量名称
const val MAX_COUNT = 8 //const属于编译期常量
val USER_NAME_FIELD = "UserName"
val mutableCollection: MutableSet< String> = HashSet()
val PersonComparator: Comparator <Person> = ...
Lambda 表达式参数
在 lambda 表达式中返回
data数据类
data class User( val name: String, val age: Int)
-
equals() -
hashCode() -
toString() -
copy()
请注意,对于那些自动生成的函数,编译器只使用在主构造函数内部定义的属性。如需在生成的实现中排出一个属性,请将其声明在类体中:
data class Person( val name: String) { var age: Int = 0}
复制
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)
过滤 list
val positives = list.filter { x -> x > 0 }
val positives = list.filter { it > 0 }
val map = hashMapOf( "name" to "zhangsan", "age" to "26", "address" to "hangzhou")
for ((k, v) in map) {
println( "$k -> $v")
println( "$k -> ${map[k]}")
}
map的访问支持 map[key]形式
“if”表达式
fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
使用条件语句
return if (x) foo() else bar()
return when(x) {
0 -> "zero"
else -> "nonzero"
}
if (x)
return foo()
else
return bar() 复制代码
when(x) {
0 -> return "zero"
else -> return "nonzero"
}
对一个对象实例调用多个方法 (with)
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { // 画一个 100 像素的正方形
penDown()
for(i in 1. .4) {
forward( 100.0)
turn( 90.0)
}
penUp()
}
对象声明
object Persion{
fun add(var a : Int , var b:Int): Int{
return a+b
}
}
val sum=Persion.add( 3, 5) //单例调用
伴生对象
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}
class MyClass {
companion object { }
}
val x = MyClass.Companion
interface Factory<T> {
fun create(): T
}
class MyClass {
companion object : Factory<MyClass> {
override fun create(): MyClass = MyClass()
}
}
val f: Factory<MyClass> = MyClass
对象表达式
button.setOnClickListener( object: View.OnClickListener(){ override fun OnClick(v:View){}})
val listener= object: View.OnClickListener(){ override fun OnClick(v:View){}}
button.setOnClickListener( object: View.OnClickListener(){
var count= 0
override fun OnClick(v:View){
count++
}
})
Lambda 表达式
button.setOnClickListener( new View.OnClickListener(){
@ override
public void OnClick(View view){
// todo
}
})
button.setOnClickListener{ // todo }
public void findMaxAgePersion(List<Persion> persions){
int maxAge= 0
Persion oldPersion= null
forEach(Persion persion:persions){
if(persion.age>maxAge){
maxAge=persion.age
oldPersion=persion
}
}
println(oldPersion)
}
List persions= new ArrayList<Persion>()
persions. add( new Persion( "zhangli", 16))
persions. add( new Persion( "wangpeng", 22))
findMaxAgePersion(persion)
val persions=listOf(Persion( "zhangli", 16),Persion( "zhangpeng", 26))
val persion=persions.maxBy{it.age}
println(persion)
lambda语法结构:
{ x:Int, y:Int -> x+y }
val sum={x: Int, y: Int -> x+y }
println(sum( 3, 5)) // lambda表达式存储到变量中,可以当做普通函数通过实参正常调用
-
如果lambda表达式作为函数最后一个实参,可以将lambda表达式放到括号外面; -
当lambda作为函数唯一的一个实参时,可以将函数括号直接省略; -
当有多个实参时候,即可以选择把lambda留在括号内强调它是一个实参,也可以放到括号外边; -
当函数有多个lambda实参需要传入,不能超过一个lambda表达式放到外面;
亦可以写成:
persions .maxBy({ persion:Persion -> persion.age})
persions .maxBy(){ persion:Persion -> persion.age }
persions .maxBy{ persion:Persion -> persion.age }
persions.maxBy{ persion-> persion.age }
persions.maxBy{ it.age } //it 是自动默认生成的参数
集合的函数式API
filter
var list=listOf( 1, 2, 3, 4)
prinltn ( list.filter() { it % 2== 0 })
// [2,4] 只有偶数留下来
val persions= listOf(Persion( "zhangsan", 30),Persion( "wangwu", 32),Persion( "liuxing", 21))
println(persions.filter{
it.age< 30
})
// Persion("liuxing",21)
map
var list=listOf( 1, 2, 3, 4)
prinltn ( list. map { it * it })
// [1,4,9,16]
val persions= listOf(Persion( "zhangsan", 30),Persion( "wangwu", 32),Persion( "liuxing", 21))
println(persions. map{
it.name
})
// [zhangsan,wangwu,liuxing]
println( persions .map( Persion ::name))
all
val peoples=listOf(Persion( "zhangsan", 27),Persion( "wangwu", 22))
println(peoples.all{it.age> 25})
// false
any
val peoples=listOf(Persion( "zhangsan", 27),Persion( "wangwu", 22))
println(peoples.any{it.age> 25})
// true
count
println(peoples{
it.age> 20
})
// 2
find
println(peoples. find{
it.age> 25}
)
// [ "zhangshan", 27 ]
with
apply
作者:Scus
链接:https://juejin.im/post/5d4e747351882525d374e625
以上是关于Kotlin 常用语法篇的主要内容,如果未能解决你的问题,请参考以下文章