Kotlin学习(十六): 关键字与操作符(Keywords and Operators)

图片来源于网络

本文同步更新于旺仔的个人博客,访问可能有点慢,多刷新几次。

Kotlin中有一些常用的关键字和标识符,同时还有一些操作符和特殊符号,这些都是和Java有不一样的地方的,这里将他们介绍一下,方便记忆和回看。

硬关键字(Hard Keywords)

Kotlin中的硬关键字不能作为标识符

package

与Java一样,Kotlin的源文件同样以包声明开始的。

package foo.bar

fun baz() {}

class Goo {}

// ...

interface

interface表示声明一个接口,

interface MyInterface {
    fun bar()
    fun foo() {
      // 可选的方法体
    }
}

class

Kotlin的类的声明与Java一样,使用class关键字

class Invoice {
   
}

object

object为同时声明一个类及其实例,请看对象表达式

super

具体内容可看Kotlin学习_类和继承、接口与实现

引用一个方法或属性的超类实现

open class Foo {
    open fun f() { println("Foo.f()") }
    open val x: Int get() = 1
}

class Bar : Foo() {
    override fun f() { 
        super.f()
        println("Bar.f()") 
    }

    override val x: Int get() = super.x + 1
}

在此构造函数中调用超类构造函数

class MyView : View {
    constructor(ctx: Context) : super(ctx)

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
}

null

null是表示不指向任何对象的对象引用的常量。

this

引用当前接收者

次构造函数(二级构造函数)中调用同一个类中的另一个构造函数

class Person(val name: String) {
    constructor(name: String, paret: Person) : this(name) {
        parent.children.add(this)
    }
    constructor(name: String, parent: Person, count: Int) : this(name) {
        parent.children.add(this)
    }
}

typealias

类型别名为现有类型提供替代名称。如果类型名称太长,您可以引入不同的较短的名称,并使用新的名称。
缩短长泛型类型:

typealias NodeSet = Set<Network.Node>

typealias FileTable<K> = MutableMap<K, MutableList<File>>

可以为功能类型提供不同的别名:

typealias MyHandler = (Int, String, Any) -> Unit

typealias Predicate<T> = (T) -> Boolean

as

as是一个中缀操作符。
用于类型转换
as是不安全的转换操作符,如果as转换失败,会抛出一个异常,这就是不安全的。

val x: String = y as String

上面的代码表示将y强转为String类型,如果y为null,那么将不能转换成String,因为String是不可空的类型,那么就会抛出一个异常,所以如果y的类型是可空类型的话,那么强转的类型就必须是可空的

val x: String? = y as String?

用于指定导入包的别名
as除了用于类型转换之外,还有一个作用就是可以指定导入包的别名

import foo.Bar // Bar 可访问
import bar.Bar as bBar // bBar 代表“bar.Bar”

as?

as?as类似,也是转换操作符,但是与as不同的是,as?是安全的,也就是可空的,可以避免抛出异常,在转换失败是会返回null

val x: String? = y as? String

as后面的类型是个可空的类型,而as?后面的类型确实非空类型,但是as?转换的类型却是可空的,这样是主要的区别。

ifelse

在Kotlin中,if表达式表示返回一个值(truefalse),Kotlin中没有三目运算符。
else与Java定义一样,定义一个if表达式条件为false时执行的分支。

//传统用法
var max = a
if (a < b)
    max = b

//带 else 
var max: Int
if (a > b)
    max = a
else
    max = b

//作为表达式
val max = if (a > b) a else b

truefalse

指定布尔类型的”真”值和”假”值。

whiledo

while是开始一个while循环(前置条件的循环),而do为开始一个do/while循环(后置条件的循环),do...while 与Java的一样,有一个区别是,语句块里面的变量在外面是可见的

while (x > 0) {
    x--
}

do {
    val y = retrieveData()
} while (y != null) // y 在这是可见的

for

for表示开始一个for循环

for (item: Int in ints) {
    // ...
}

when

Kotlin中的when就类似与Java的switch,但是与switch不同的是,when在其它分支都不匹配的时候默认匹配 else 分支,如果没有把所有可能和分支条件列出来,那么else是强制的,这与switchdefault也有区别。

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 默认
        print("x is neither 1 nor 2")
    }
}

break

break用于终止循环的执行,使用break 跳转到标签处,跳出循环

loop@ for (i in 1..10) {
    for (j in i..10) {
        if (j == 5) 
            break@loop // 跳出循环
        Log.e(Tag, j.toString()) // j 为5的时候跳出了循环,只打印1、2、3、4
    }
}

continue

continue用于跳到最近的闭合循环的下一次循环

loop@ for (i 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值