在昨天和做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. 一:robot framework环境安装

    1.安装robot framework: 打开cmd进入dos下,输入 pip install robotframework Microsoft Windows [版本 10.0.18362.267] ...

  2. 软件安全----警惕缓冲区溢出(C中那些不安全的库函数)

    原文链接:https://blog.csdn.net/yang_yulei/article/details/45314177 链接:http://www.360doc.com/content/11/0 ...

  3. fist-第七天冲刺随笔

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  4. pandas入门使用

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  5. 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析

    如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象的tabShape属性

    tabShape属性用于控制主窗口标签部件(Tab Widget)中的标签的形状,对应类型为QTabWidget.TabShape,有两种取值: 1.QTabWidget.Rounded:对应值为0, ...

  7. Codeforces Edu Round 50 A-D

    A. Function Height 由于只能提升\(x\)为奇数的点,每个三角形的底一定为\(2\), 则要求我们求: \(2 * (h_1 + h_2 + - + h_n) / 2 = k\),使 ...

  8. Java并发编程的艺术(四)——JMM、重排序、happens-before

    什么是JMM JMM就是Java内存模型.目的是为了屏蔽系统和硬件的差异,让同一代码在不同平台下能够达到相同的访问结果.规定了线程和内存之间的关系. 内存划分 JMM规定了内存主要划分为主内存和工作内 ...

  9. 页面上下载canvas中的内容作为图片

    使用如下代码,获得Canvas图像对应的data URI,也就是平常我们所说的base64地址 var dataUrl = document.getElementById("canvasId ...

  10. JavaSE14-集合·其一

    1.Collection集合 1.1 集合体系结构 集合 (接口)Collection:单列 (接口)List:可重复 (实现类)ArrayList (实现类)LinkedList (接口)Set:不 ...