Kotlin学习!!!此帖有点火

为什么使用Kotlin

项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了,Kotlin在兼容Java的基础上还能大大提升开发效率。Kotlin有许多特性但对于开发来说,快速适应和学习更为重要,很多时候我们都是在不明白其原因就开始使用的,正如我们不可能把Retrofit原理研究透才使用它。只要它足够稳定成熟,并能有效的提升开发效率都是值得尝试的。鄙人不才,目前使用Kotlin的原因主要是因为它语法简洁,支持lambda表达式,强大的when语法,不用写分号结尾,光是这些就足以让我喜欢Kotlin。至于空安全之类的特性,毕竟服务端数据类型太多null了并没多大感触,这些特性在实际应用中潜移默化的就吸收了,以至于现在遇到几个Java编写的代码,都有些不适应了。

万能的冒号

在Kotlin中冒号:用万能来称呼绝不为过。常量变量的类型声明,函数的返回值,类的继承都需要它

//val表示常量var表示变量声明
val name: String = "tutu" 
//省略类型说明
var age = "23"
//fun表示函数
fun getName(): String{
   return "tutu"
}
//类继承
class UserList<E>(): ArrayList<E>() {
    //...
}

除此之外还有一个特别的地方也需要它,使用Java类的时候。Kotlin最终会还是编译成Java字节码,使用到Java类是必然的,在Kotlin语法如下

val intent = Intent(this, MainActivity::class.java)

类名::class.java没有为什么就这么写记着就是

我是谁的@

除了冒号另一个重要符号@,想必用到内部类和匿名内部类的地方一定很多,再加上支持lambda语法,没有它谁告诉你thisreturn指的是哪一个

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

偷懒的方法

1). Kotlin特色
Java的getter/setter方法自动转换成属性,对应到Kotlin属性的调用

public class User {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

这样一个Java类在Kotlin中只需这样调用

val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age

反之Kotlin的属性自动生成Java的getter/setter方法,方便在Java中调用,同样的定义在Kotlin中

class User {
    var name: String? = null
    var age: String? = null
}

我们的getter/setter方法有时不会这么简单,这就需要自定义getter/setter了,另起一行设置get()/set(value)方法,实现一个Java中常用的单例,这里只为了展示,单例在Kotlin有更简单的方法实现,只要在 package 级别创建一个 object 即可

class User {
    companion object {
        @Volatile var instance: User? = null
            get() {
                if (field == null) {
                    synchronized(User::class.java) {
                        if (field == null)
                            field = User()
                    }
                }
                return field
            }
    }

    var name: String? = null
    var age: String? = null
}

自定义getter/setter重点在field,跟我们熟悉所Java的this指代当前类一样,field指代当前参数,直接使用参数名instance代替不会报错但单例就没效果了

2). 字符串模板
在Java中拼接字符串的代码可读性都很差,在Kotlin字符串拼接变得非常简洁,只需用$后面加上参数名,复杂的参数要加上{}

val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age
var userInfo = "name:${user.name},  age:$age"
//输出结果:name:tutu, age:23

3). lambda
一开始觉得lambda很高级完全看不懂,其实很简单的就是把接口名、方法名和参数类型省掉不写再加个->罢了,明白这点了就不介绍。

新面孔

1). 延迟加载
2). 流程控制
内容上一篇写过参考 Android Kotlin 学习笔记,不重复介绍

空判断

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式一种像Java一样抛出空异常,字段后加!!,另一种不做处理直接跳过,字段后加?

//类型后面加?表示可为空
var age: String? = "23" 
//抛出空指针异常
val ageInt = age!!.toInt()
//不做处理跳过
val ages = age?.toInt()

注意事项

内部类和参数默认为public,而在Java中为private
类默认为不可继承(final),想要可被继承要声明为openabstract
取消了static关键字,静态方法和参数统一写在companion object
internal模块内可见,inner内部类

以上仅是对使用频率较高的语法总结,学会基本可以阅读Kotlin代码,遇到点问题Google速查一下,至于智能转换、类型推导之类的不用说使用后喜欢自然就会了。当然这只是kotlin的基本语法,方便Java快速熟悉kotlin,深入学习还请阅读相关资料。

相关链接

在线学习
Kotlin 官方文档
Kotlin 中文文档
Kotlin 中文文档 这个感觉像官网的中文版,翻译质量很好,不过左侧的分类没法点击,不知是不是浏览器问题,我就一个个罗列出来了
入门
基础
类和对象
函数和lambda表达式
其他
文档
互操作
FAQ
最终找到了翻译出处kotlin-web-site-cn
http://tanfujun.com/kotlin-web-site-cn/

### 回答1: Kotlin 是一种现代的静态类型编程语言,可以运行在 Java 虚拟机上,也可以编译成 JavaScript。它是由 JetBrains 开发的,并于2016年首次公开发布。Kotlin 最初是设计用于解决 Java 语言的一些问题,如繁琐的样板代码、空指针异常等。现在,Kotlin 已经成为一种流行的编程语言,被广泛用于 Android 开发、服务器端开发和其他应用程序。 "!!" 是 Kotlin 的一个非常重要的操作符,称为 "非空断言运算符",可以将一个可空类型的变量转换为非空类型。但是使用该操作符需要非常谨慎,因为如果变量为 null,则会抛出 NullPointerException 异常。 ### 回答2: Kotlin的"!!"是一种语言特性,表示对一个对象进行非空断言。它的作用是告诉编译器,我确定这个对象一定不为空,不需要进行空检查。 在Kotlin,对象可以分为可空类型和不可空类型。如果我们使用可空类型的对象调用一个方法或属性,编译器会强制我们进行空检查,以防止空指针异常的发生。但是有时候我们明确知道一个对象不可能为空,可以使用"!!"操作符来告诉编译器不需要空检查。 然而,使用"!!"操作符需要谨慎,因为如果我们错误地对一个为空的对象使用"!!",就会导致空指针异常的发生。因此,在使用"!!"操作符时,我们需要确保对象一定不为空,否则会抛出运行时异常。 总结来说,Kotlin的"!!"是一种用于对不可能为空的对象进行非空断言的语言特性。它可以帮助我们避免不必要的空检查,但同时也需要我们谨慎使用,确保对象一定不为空。 ### 回答3: "kotlin !!" 是 Kotlin 编程语言的一种运算符的写法。 在 Kotlin ,"!!" 表示非空断言(Non-null Assertion)运算符。当我们在代码使用 "!!" 运算符时,它的作用是告诉编译器一个承诺,即该对象不会为 null,可以放心地调用其属性或方法。 使用 "!!" 运算符需要注意,如果对象为 null,那么在运行时会抛出 KotlinNullPointerException 异常。因此,在使用 "!!" 运算符之前,需要确保该对象不为 null,否则会导致程序崩溃。 非空断言运算符 "!!" 的使用场景通常是在代码已经判断了对象不为 null 的情况下,为了更方便地调用对象的属性或方法,可以使用该运算符来省略不必要的空检查代码。 总之,"kotlin !!" 是 Kotlin 编程语言的一个运算符,表示非空断言,用于告诉编译器对象不为 null,可以安全地调用其属性或方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值