Kotlin是啥我就几句话总结下:类似IOS的Swift,却比Swift成熟稳重,使用起来一样的爽。Kotlin可以被直接编译为java虚拟机执行字节码,跟JAVA100%互通。也可以被编译为js直接被浏览器执行,直接的native编程,跟C一个样,当然这个还不够成熟。前阵子官方好像还发出了声明说支持IOS。对于这样一门前端后端通杀的语言,我们现在不来学学是不是太可惜了。
凡事当断则断,唯快不破,睁大眼睛,看看会不会被它的惊艳之处亮瞎吧
Begin:
1.终于不要像JAVA那样无脑的判断NULL了
记住几个符号:!!(强制认为不是空)、?(是空我就返回空)结合Elvis 操作符爽到飞起
如果 ?: 左侧表达式非空,elvis 操作符就返回其左侧表达式,否则返回右侧表达式。
val len = b?.length ?: -1
注意:当且仅当左侧为空时,才会对右侧表达式求值。
比如一个嵌套层次比较多的结构体,一个国家有很多省,省有很多市,市又有很多县,然后是乡/镇等等。
用程序语言如何描述呢?
country?.province?.city?.down //这样的写法是不是很简洁,要是JAVA判空肯定判到你吐血
2.完美的类型推导
定义变量只有:var(可变)、val(不可变);共同点:正常情况下二者都必须在定义时候初始化,这是设计之美,很大程度上避免了null的发生。当然有人就会问非正常情况呢?如何定义一个不进行初始化的变量呢?莫急。。。
abstract var mId:Int //其实这个不算
lateinit var mName: String //对象数据类型
var mAge by Delegates.notNull<Int>() //基本数据类型
var str: String? = null //和var str: String 可是不同的哈“?”
注意:尽量将变量定义为val,它是线程安全的
3.扩展函数
也许有人也不会觉得这个有什么高明之处,但是我认为他很好的归类了JAVA的工具类。
大家是不是觉得JAVA的工具类很泛滥,github上虽然有人做了很好的整理,但是能和自己项目完美搭配的少,总是缺胳膊少腿的;又或者是你不想就引用一个工具类而引用一个完整的工具包。
关键是现在google自己都开始撸这块了!!!github地址:https://github.com/android/android-ktx
上面BB了那么多,接下来看看Kotlin到底是如何来扩展的吧。
//剔除一个字符串中所有的空格
fun String.trimAll(){
this.replace("\\s*".toRegex(), "")
}
//使用
val a:String = " ab c de "
a.trimAll() //打印结果:abcde
4.相信每一位安卓开发人员对 findViewById() 这个方法再熟悉不过了,毫无疑问,潜在的 bug 和脏乱的代码令后续开发无从下手的。实操如下:
//1.添加扩展
buildscript {
ext.kotlin_version = '1.2.40'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin-android-extensions'
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" //注意最新的版本这里是jdk,而不是jre,当然你想看到删除线问题就也不大了
//2.import kotlinx.android.synthetic.main.activity_main.* //import kotlinx.android.synthetic.main.<布局>.*
//3.爽起来,将TextView在XML布局中的id当神来使用,id(main_tv)就代表TextView的一切
main_tv.text = "TextView"
main_tv.visibility = GONE
main_tv.setOnClickListener { //配合lambda
Log.d("chineseboy","$mName") //字符串拼接再也不需要 +了,
}