Kotlin中常见的符号

来源:互联网 发布:python运维检程序脚本 编辑:程序博客网 时间:2024/06/01 19:46

在今年的Google I/O大会上,Google正式宣布,Kotlin将会成为Android开发的官方支持语言。除了Android外,Kotlin还可以完全作为服务端开发的语言,比如在未来的Spring 5就将对Kotlin提供强大的支持。以及浏览器编程语言,与JS进行交互。

Kotlin是一门静态语言,支持多种平台,包括移动端、服务端以及浏览器端,此外,Kotlin还是一门融合了面向对象与函数式编程的语言,支持泛型、安全的空判断,并且Kotlin与Java可以做到完全的交互。

现在介绍Kotlin的文章已经是铺天盖地,大部分都是从Kotlin的基本数据类型介绍起,本文不想重复这样的事情,这里从另一面来开始,我们来看看Kotlin中的各种符号。

这里写图片描述

  • $符合
println("itemB:$itemB")//字符串模板var userInfo = "name:${user.name},  age:$age"
  • ?问号

表示这个对象可能为空

//在变量类型后面加上问号,代表该变量是可空变量  var name: String? = "zhangsan"  
/** * 如果str不能转为Int类型,则返回null */fun parseInt(str: String): Int? {   // (代码略)}
b?.length //如果 b非空,就返回 b.length ,否则返回 null,这个表达式的类型是 Int? 。
  • Elvis操作符(?:)

如果r非空,我使用它;否则使⽤某个非空的值 x ”:

 val l: Int = if (b != null) b.length else -1 

除了完整的 if-表达式,这还可以通过 Elvis 操作符表达:

 val l = b?.length ?: -1 

如果 ?: 左侧表达式非空,elvis操作符就返回其左侧表达式,否则返回右侧表达式。请注意,当且仅当左侧为空时,才会对右侧表达式求值。

  • !! 操作符

对于NPE 爱好者,我们可以写 b!! ,这会返回一个非空的 b 值 或者如果 b 为空,就会抛出一个 NPE 异常:

val l = b!!.length

因此,如果你想要一个 NPE,你可以得到它,但是你必须显式要求它,否则它不会不期而至。

  • ==号与===号

==判断值是否相等,===判断值及引用是否完全相等。

val num: Int = 128;val a:Int? = numval b:Int? = numprintln(a == b)print(a === b)
  • ..符号

Kotlin中有区间的概念,区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。 区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:

if (i in 1..10) { // 等同于 1 <= i && i <= 10    println(i)}//使用until函数,创建一个不包括其结束元素的区间for (i in 1 until 10) {   // i in [1, 10) 排除了 10     println(i)}for (i in 1..4) print(i) // 输出“1234”for (i in 4..1) print(i) // 什么都不输出

如果你想倒序迭代数字呢?也很简单。你可以使用标准库中定义的 downTo() 函数

for (i in 4 downTo 1) print(i) // 输出“4321”

step()函数,可以指定任意步长

for (i in 1..4 step 2) print(i) // 输出“13”for (i in 4 downTo 1 step 2) print(i) // 输出“42”
  • _(下划线)
 data class Book(var id: Int, var name: String)

上面的示例中,Book声明了 id,name两个变量。解构时如果只需要id这一个变量时,可以这么做:

val book = Book(1, "英语")val (id, _) = book
  • ::符号
//得到类的Class对象startActivity(Intent(this@KotlinActivity, MainActivity::class.java))//内联函数和reified后续介绍inline  fun <reified T> Gson.fromJson(json:String):T{    return fromJson(json, T::class.java)}

方法引用

var setBook = setOf<String>("hello", "hi", "你好")//    setBook.forEach { print(it)}    setBook.forEach(::print)
  • @符号

1、限定this的类型

class User {    inner class State{        fun getUser(): User{            //返回User            return this@User        }        fun getState(): State{            //返回State            return this@State        }    }}

2、作为标签

跳出双层for

loop@ for (itemA in arraysA) {     var i : Int = 0      for (itemB in arraysB) {         i++         if (itemB > 2) {             break@loop         }         println("itemB:$itemB")     }}

命名函数自动定义标签:

fun fun_run(){    run {        println("lambda")    }    var i: Int = run {        return@run 1    }    println("$i")    //匿名函数可以通过自定义标签进行跳转和返回    i = run (outer@{        return@outer 2    })    println(i)}

从forEach函数跳出

fun forEach_label(ints: List<Int>){    var i =2    ints.forEach {        //forEach中无法使用continuebreak;//        if (it == 0) continue //编译错误//        if (it == 2) /*break //编译错误 */        print(it)    }     run outer@{         ints.forEach {             if (it == 0) return@forEach //相当于在forEach函数中continue,实际上是从匿名函数返回             if (it == 2) return@outer //相当于在forEach函数中使用break,实际上是跳转到outer之外         }     }    if (i == 3)    {        //每个函数的名字代表一个函数地址,所以函数自动成为标签        return@forEach_label //等同于return    }}
  • {}符号

这里指的是lambda表达式的符号。

// 一个参数var callback: ((str: String) -> Unit)? = nullcallback = { println(it)}// 判断并使用callback?.invoke("hello")//两个参数var callback2: ((name: String, age: Int) -> Unit)? = nullcallback2 = { hello: String, world: Int -> println("$hello's age is $world") }callback2?.invoke("Tom", 22)var callback3 :((num1:Int, num2: Int)->String)? = null//类型可以推断callback3 = { num1, num2 ->    var res:Int = num1 + num2    res.toString()}println(callback3?.invoke(1, 2))

kotlin中{}里面整个是lambda的一个表达式,而java8中{}部分只是lambda表达式的body部分。

还要 :符号,用于类名后表示继承,用于变量后限定变量类型,是Kotlin中最常用的符号,这里基本囊括了Koltin中一些常见的符号,关于符号就介绍这么多,如有遗漏请再下方留言提出,我将补充上。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摩拜单车注册的手机号注销了怎么办 摩拜单车注册手机号换了怎么办 被手机店骗话费送合约机怎么办 机蜜租赁的手机丢了怎么办 合约机返话费手机掉了怎么办 手机摔坏了开不了机怎么办 华为魅特10屏幕锁住了怎么办 电信送的路由器只有一个端口怎么办 苹果手机5c屏幕死机了怎么办 日版苹果手机显示无服务怎么办 iphone有锁4g变3g怎么办 耳机胶套脱落掉入耳朵怎么办 苹果笔记本电用完了开机了怎么办 华为荣耀5x锁屏密码忘了怎么办 华为荣耀锁屏密码忘了怎么办 华为手机屏锁密码忘了怎么办 华为荣耀9青春版相机很模糊怎么办 华为荣耀7手机照相忽然模糊怎么办 苹果5s进水开不了机怎么办 红米4a玩王者荣耀卡怎么办 老是显示媒体存储以停止运行怎么办 支付宝邮二维码地址留错了怎么办 华为畅享5s太卡怎么办 金立手机导航gps信号弱怎么办 贴了膜后边缘有气泡怎么办 魅族mx5刷机失败然后黑屏怎么办 魅族手机无线网玩王者卡怎么办 魅族手机玩王者荣耀卡怎么办 魅族手机导航gps信号弱怎么办 魅族手机4g信号差怎么办 魅族手机下面一排键失灵怎么办 魅族手机冲不进去电怎么办 苹果账号付款了又让付款怎么办 魅蓝3s开机定屏怎么办 魅族手机未找到固件怎么办不用电脑 魅族手机触屏局部失灵怎么办 更新了魅蓝的新系统掉帧怎么办 手机后盖摔了一下凹了一个洞怎么办 魅族手机充电需要重启怎么办 网上预约好了但就诊卡丢了怎么办 如果魅族手机锁屏密码忘记了怎么办