Kotlin入门之第01篇习惯用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36252044/article/details/86664867

本篇主要介绍一些在 Kotlin中广泛使用的语法习惯.

1.数据类

Android中经常创建一些保存数据的Model类,比如UserBean类.在Kotlin中,这叫做数据类,并标记为 data.

eg:

data class Customer(val name:String,val email:String)

Kotlin会为Customer 类提供以下功能:
- 所有属性的getters (对于var 定义的还有setters)
- equals()
- hashCode()
- toString()
- copy() 
- 所有属性的component1(),component2()等

解释

在这里解释下 componentN()函数
- componentN()函数是指按声明顺序对应于所有属性

eg:

val(name,age) = person (解构声明,就是把一个对象解构成很多变量)

val name = person.component1()
val age = person.component2()

- 这里的component1()和component2()函数是在Kotlin中广泛使用的约定原则.

2.函数的默认参数

函数的入参可以有默认参数,这里和Java中还是有区别的

eg:
fun foo(a:Int = 0,b:String=""){

}

解释

如果调用foo()函数不传入参,函数自己会对入参有个默认值,a = 0,b =""

3.过滤list

这里先介绍 filter的用法,就是过滤掉满足条件的数据,

eg:

val list = listOf(1,2,3,4,5)
fun main(){
	val eg1 = list.fliter{it > 3}
	val eg2 = list.filter{x -> x>2}
	println(eg1)
	println(eg2)
}
- 结果
[4,5]
[3,4,5]

4.字符串内插

其实我的理解就是占位符

eg:

val name = "lxx"
fun main(){
	print("Name is $name")
}
- 输出 Name is lxx

5.只读list,map

只读list

val list = listOf("a","b","c")
val map = mapOf("a" to 1,"b" to 2,"c" to 3)

6.延迟属性

这里仅仅介绍 by lazy的用法
在上一篇我们了解了,Kotlin中属性在声明时候必须要初始化,不然就会编译不通过.
但是有时候不想声明一个为空的属性,也没有办法在声明变量的时候赋值. 这时就用到了延迟属性

var p: String by lazy{
	"ppp"
}

解释

by lazy 是在声明属性的同时,也指定了延迟初始化是的行为,在属性第一次被使用的时候能自动初始化.

7.非空判断

if not null 缩写

eg:
val files = File(“Test”).listFiles()
println(files?.size)

if not null and else 缩写

eg:
val files = File(“Test”).listFiles
println(files?.size?:“empty”)

如果文件的大小为空的化,输出"empty"字符串

在可能为空的集合中取第一个元素

val emails = ....   //集合可能为空
val item = emails.firstOrNull()?:""

8.try/catch 表达式

fun test(){
	val result = try{
		count()
	}catch(e: AirthmeticException){
		throw IllegaStateExcepyion(e)		
	}
	//得到result,然后做对应的逻辑处理
}

9. if表达式

fun foo(params:Int){
	val result = if(param == 0){
			"zero"
	}else if(param == 1){
			"one"
	}else{
			"other"
	}
	//对result做操作
}

10.单表达式函数

fun getInt() = 20

- 也可以这样写

fun getInt():Int{
	return 20
}

11.对一个对象实例调用多个方法 (with)

eg:

class StringDemo{
	fun one():String{
    	return "First fun "
	}

	fun second(): Int{
   		return 2
	}
}
fun main(){
	val myDemo = StringDemo()
	with(myDemo){
    	println( one())
    	println( second())
	}

- 输出 
First fun
2

12.使用可空布尔

val b :Boolean? = null
fun main(){
	if(b == true){
    	println("true")
	}else{
    	println("false 或者是 null")
	}
}   
- 输出是  false 或者是 null

猜你喜欢

转载自blog.csdn.net/qq_36252044/article/details/86664867