在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄。以后要更加努力地学习,要着重学习原理、方法论,不能只停留在会用的阶段。

今天又要献丑分享一些关于使用Kotlin这门新兴的编程语言的一些要注意的地方。因为上一个项目全部使用了kotlin,算是给后面接手的朋友的一份交接文档吧。

先分享三篇文章:

Kotlin for android developers

为什么说Kotlin值得一试

Kotlin: Java 6 废土中的一线希望

这三篇文章都是我反复阅读参考很多遍的关于kotlin使用的中文教程,当然,有时候遇到了中文教程里讲的不清楚,或者是感觉翻译不太对胃口的,可以直接去查阅官方文档

遇到问题请善用资料,基本上都能从中得到解答。以下简单介绍一下常见的几个注意点。

变量类型:可空

kotlin的特性之一是类型安全。定义变量时需要定义该变量是否为空,一旦要求变量不能为空,那后续的空指针问题自然也不复存在。我们先来看kotiln里是如何定义变量的:

java:

String str = "test";
final String str2 = "test2";
String str3; kotlin: var str = "test"
val str2 = "test2"
var str3:String ?= null

kotlin使用var,val关键字定义变量,如果在定义变量时直接赋值,则可以不用指定变量类型,否则需要在变量名后使用“:”来指定类型。在类型后加“?”表示该变量可空。如果变量可空,那在后续使用变量时,就必须先判断是否为空。

另外从代码中可以看出很重要的一点,那就是:从此再也不用写分号啦

var a:Int = null  //错误,类型后没?,即不可空类型,自然不能等于null
var a:Int? = null //正确 val canNull: Int ? = 0
canNull.toFloat //错误,可空变量调用时要判断空
canNull?.toFloat //正确,(如果是null,什么都不做)
canNull!!.Float //正确,(如果null,报空指针)
val canNotNull: Int = 0
canNotNull.toFloat //正确

那如果在定义变量时(例如定义成员变量),又想该变量不为空,又不想子定义时就初始化要怎么办呢?使用lateinit关键字

lateinit var test:String //正确
lateinit val test:String //错误
lateinit var test:Float //错误

关于lateinit关键字的使用限制:

lateinit modifier is allowed only on mutable properties

lateinit modifier is not allowed on primitive type properties

可见,lateinit修饰符只能修饰不可空类型,并且不允许修饰基础类型(四类八种基础类型int, double,boolean等)。

常用语法:

switch

java:

int test = 1;
switch(test) {
case 1:
...
break;
default:
break;
} kotlin: when (test) {
1 -> fragment = ShopFragment()
else -> {
}
}

这只是when最简单的用法,但kotlin里when的用处要比switch强大得多,when可以返回值,甚至可以在匹配条件里检测参数类型等,例如:

val result = when (x) { //返回值
0, 1 -> "test"
else -> "else"
} when(view) { //检测参数类型,并且可见,在kotlin里,instanceof使用is代替
is TextView -> view.setText("I'm a TextView")
else -> view.visibility = View.GONE
} var test = 3
when(view) { //检测参数范围
in 0..10 -> {
...
}
else -> {
...
}

更多用法详见教程。

for循环

java:

for(int i =0; i < 5; i++) {
} kotlin: for(i in 0..4) {
} for (item in listData) { //遍历列表,直接操作列表内的对象
item.method()
} for (i in listData.indices) { //遍历列表带行index
} for((i, item) in list.witnIndex()) { //加强版
} listData.forEach { it.method() } //变种的for循环

Kotlin 简单使用手册的更多相关文章

  1. moloch1.8.0简单操作手册

    moloch1.8.0简单操作手册 Sessions 页面:Sessions主要通过非常简单的查询语言来构建表达式追溯数据流量,以便分析. SPIView 页面: SPIGraph页面:SPIGrap ...

  2. crontab简单使用手册

    Linux定时任务(1)- crontab 枫林风雨关注 0.1682018.12.14 12:29:47字数 946阅读 921 执行定时任务 crontab 执行循环任务 at 执行一次性任务 c ...

  3. EasyX库简单中文手册

    EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ...

  4. typora简单使用手册

    typora简单使用手册讲解`` 下载网站 网址:https://typoraio.cn/ 苹果电脑:https://typora.en.softonic.com/ 正版呢当然是收费 破解版自行百度 ...

  5. Lua Go R HEXO Kotlin 简单介绍

    Lua Lua使用C编写而成的脚本语言.同为脚本语言的Python拥有庞大的类库工具包,定位于独立开发,Lua极度精简化,没有提供太多功能包,必须与C.C++等语言混合使用,目的是为了快速并动态的嵌入 ...

  6. kotlin 简单处理 回调参数 加?

    Kotlin Parameter specified as non-null is null 2017年10月18日 17:21:49 amiko_ 阅读数:9017    版权声明:本文为博主原创文 ...

  7. MongoVUE简单操作手册

    本文转自网络,对疑问的地方做了修改 官方参考文献:http://www.mongovue.com/tutorials/ MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久 ...

  8. SVN - 简单使用手册

    背景 由于项目需要,新增了两名程序员来一起支持一个分支的开发工作,因此需要在原来的SVN中制作分支并且为new commer  分配用户以及权限. 0. 准备 在Window系统上使用SVN,我们最好 ...

  9. Linux下的PostgreSQL简单安装手册

    1. 安装环境     linux版本: CentOS release 6.2 (Final)     pg版本    : postgresql-9.5.0   2. pg数据库下载地址 --http ...

随机推荐

  1. Java MQTT 客户端之 Paho

    Paho 自动重连后订阅的主题会清空,所以需要实现 MqttCallbackExtended 接口,在 connectComplete 方法添加订阅主题:而不是实现 MqttCallback 接口 一 ...

  2. moviepy音视频开发:音频剪辑基类AudioClip详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...

  3. 使用PyQt(Python+Qt)+moviepy开发的视频截取、音视频分离、MP4转GIF动图工具免费下载分享

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在因博文素材需要将软件操作制作成动画时,发现网上相关绿色使用工具都需要 ...

  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件的是否接受鼠标拖放事件的acceptDrops属性及含义

    acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,在Qt Designer中可以通过属性acceptDrops设置部件是否接受鼠标拖放事件.如果部件接受 ...

  5. print(end="\r") 滚动输出到屏幕

    for i in range(10000): print(i, end = "\r") print(end="\r") 滚动输出到屏幕

  6. 效率神器-MouseInc推荐和使用

    主要功能 鼠标手势 按住右键滑动即可开始使用. 配置细微,可自由修改手势宽度,颜色,识别灵敏度等. 支持黑名单,支持特定软件自定义手势,支持复合动作. 功能非常强大,比如下面的操作: 选中一个网址,画 ...

  7. css外边距重叠及避免方法

    <html lang="en"> <head> <meta charset="UTF-8"> <meta name=& ...

  8. Python(一) 快速配置Python编译环境与第一个py文件程序

    1. Python基本语法在此不熬述. 2. 到管网下载Python 3.6.x 版本,与本机匹配的版本,如本机是 win7 64 python-3.6.5-amd64 3. 下载IDE:Python ...

  9. 学习笔记:斜率优化DP

    作为数学渣,先复习一下已知两点\((x_1, y_1)\), \((x_2, y_2)\),怎么求过两点的一次函数的斜率... 待定系数法代入 \(y = kx + b\) 有: \(x_1k + b ...

  10. Hyper-v 虚拟机使用NAT方式连接网络

    最近因为搞docker的原因,卸掉了vb和vm,用上了hyper. 其实一直挺喜欢hyper-v的,但是一直都受虚拟网络的影响--hyper-v创建不了vm和vb使用的那种NAT连接方式. 默认使用外 ...