我的Kotlin学习之旅 ( 三 )

来源:互联网 发布:java变量名命名规则 编辑:程序博客网 时间:2024/06/10 17:51

这里先简单的说一些Kotlin的习惯用语
1.数据类
只保存数据的类,在 kotlin 中这样的类称之为 data 类,用 data 标注:

data class User (val userName: String,val age: Int)

这里可以直接省略一对大括号,data类必须要有一个主的构造函数
值得注意的是:
1.主构造函数应该至少有一个参数,否则代码会直接报错
2.主构造函数的所有参数必须标注为 val 或者 var (val的话,一旦对参数的值进行了设置,该参数的值就不能再改变了)
3.数据类不能是 abstract,open(可以被继承的意思),sealed(密封类),或者 inner (内部类)
4.数据类不能继承其它的类(但可以实现接口)

2.多重声明

val jane = User("jane", 35)val (name, age) = jane

在代码中对数据类进行多重声明之后,就可以直接拿name和age来使用了

3.只读List

val list = listOf("a","b","c")

listOf会创建一个不可被修改的list,不管前面的接收者是val还var,item的值都不可被改变
没有传统的.add方法哟
例如下面的代码就会报错(item字样上飘红):

for (item in list){    item = "ccc"}

取值:

list[i] 或者  list.get(i)

推荐使用前者

4.只读map

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

参数的前者是key,to后面是value
使用:

map["a"]

5.如果不为空则… 的简写
例如:

 val list = listOf("a","b","c") list?.size

第二行中代表的是,返回当list不为空时,返回它的size

6.如果不为空…否则… 的简写

list?.size ?: "empty"

list?:这是一个可以为null的list,即list可空
?: 是否则的意思,当list不为空时,返回它的大小,为空时返回“empty”的字符串

7.利用 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()}

这一点我觉得挺好玩的,当想调用一个类的很多方法时,使用with(对象实例),就可以在
with的有效范围内直接调用该类的方法,很便捷

///////////////////////////////////////////////////////////////

接下来简单的了解一下Kotlin的基本类型
关于数值,在Kotlin中,字符char不是数值类型,用单引号包裹起来

类型 ———字宽 —– 字节
Double —– 64 ———8
Float ——– 32 ——— 4
Long ——– 64 ———8
Int ———– 32 ——— 4
Short ——- 16 ——– 2
Byte ——— 8 ——— 1

关于比较问题:

val a: Int = 10000print (a === a ) //打印 'true'val A: Int? =aval anotherA: Int? = aprint (A === anotherA ) //注意这里打印的是 'false'

false的原因是装箱过的数值是不保留特征的,个人理解是就像对象一样,这两个可空的Int值,指向的是两个不同的地址(=== 表示的判断比较的两个值是否是同一个对象)
但是另一方面,它们的值是相等的

print (A == anotherA ) //注意这里打印的是 'true'

关于显示转换

val a: Int? =1 //一个装箱过的 Int (java.lang.Integer)val b: Long? = a // 一个隐式装箱的 Long (java.lang.Long)print( a == b )

这里打印出来的是false,Kotlin不支持隐示转换,需要下面这样做:

val b: Long? = a!!.toLong()

!! 的意思是返回a的非空,因为上面的a的类型是Int?,除了是Int,还可以为空
当a非空的前提下,可以显示的转换成Long型的值

关于String
Kotlin 有两种类型的 string :一种是可以带分割符的,一种是可以包含新行以及任意文本的。带分割符的 string 很像 java 的 string

val s = "Hello World!\n"

整行String 是由三个引号包裹的(“”“),不可以包含分割符但可以包含其它字符
(分隔符可以是空格,逗号,#号等等之类)

val text = """    for (c in "foo")        print(c)"""
原创粉丝点击