Android Kotlin 开发心得笔记
简介
Kotlin虽说是Java的扩展,能够使用Java类库,但是语法规则完全不同于Java。所以学习Kotlin要么直接忘了Java语法,要么跟Java比较看看区别在哪。经过了一天的折腾我选择先忘掉Java学完Kotlin再比较
关键字(尽量补全)
by
as
lazy
init
downTo
声明:open
override
fun
inline
inner
internal
data
companion
object
lateinit
var
val
判断:when
in
is
运算:and
or
类型
Any
Unit
基本类型:Boolean
Byte
Short
Int
Long
Float
Double
Char
Android项目中使用Kotlin
1. 安装Kotlit插件
Android Studio 默认没有装Kotlin插件File/Setting/Plugins/Install JetBrains plugin
搜索Kotlin点击Install
安装,Kotlin Extensions For Android已经过时废弃了。接下来只需要简单的配置就可在项目中使用Kotlin和Java同时开发了。
2. 使用Kotlin
项目gradle加入编译脚本
buildscript { ext.kotlin_version = '1.0.3' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
当前工程gradle加入引用
apply plugin: 'kotlin-android' //... android { sourceSets { //添加一个源码文件夹 main.java.srcDirs += 'src/main/kotlin' } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' //Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" //... }
以上操作其实只需要在Tools->Kotlin->Configure Kotlin in Project
即可自动配置
3. 使用Kotlin的Android扩展插件
kotlin-android-extensions
使用这个插件,再需要调用findViewById,XML布局定义的控件,会自动生成引用,对于我们来说现在布局文件就是一个属性
加入编译脚本(避免误人子弟这个版本已经很旧了,版本号自行修改)
buildscript { ext.kotlin_version = '1.0.3' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }
加入引用
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' //... dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' //Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" //... }
另外还可使用Anko
,Anko目的是用代码来代替XML生成布局,加入引用即可
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' //... dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' //... // Anko compile 'org.jetbrains.anko:anko-sdk15:0.8.2' // sdk19, sdk21, sdk23 are also available compile 'org.jetbrains.anko:anko-support-v4:0.8.2' // In case you need support-v4 bindings compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.2' // For appcompat-v7 bindings }
Kotlin 基本语法
先说个学习Kotlin语法的小窍门,将代码用Java写好,然后Code/Conver Java File to Kotlin File
转换成Kotlin代码,或者将Java代码复制到Kotlin文件会提示转换也是挺方便的,比较差异很容易就能理解了,一开始难免不适应习惯后相信你一定会喜欢上Kotlin
定义
忘掉Java的那一套写法不然会很不适应的,Kotlin有自己的特性不该被Java的思维所束缚。在Kotlin中常量用val
声明,变了用var
声明,关键字在前面,类型以冒号:
隔开在后面,也可以省略直接赋值,类型后带问号?
表示可为空类型(默认空安全)。
常量val
延迟加载by lazy{}
,默认线程安全关闭线程安全lazy(LazyThreadSafetyMode.NONE){}
,变量var
延迟加载lateinit
。
//常量数组int[][][] arrs = new int[3][2][1]; val arrs = Array(3) { Array(2) { IntArray(1) } } //空安全变量 var str: String = "hello" //可为空字符串变量 var str1: String? = null
条件
if...else
正常使用,不过移除了switch
用更强大的when
替代,when子式可以是各种返回Boolean的表达式
val x = 7 when (x) { in 1..10 -> print("x is in the range") in validNumbers -> print("x is valid") !in 10..20 -> print("x is outside the range") else -> print("none of the above") }
循环
while
和 do...while
同Java并无区别,for
则有很大改变并多出了几个变种