kotlin-30分钟快速入门
1.定义变量
在kotlin中,通过var 或者 val 来定义,区别就是 val定义的变量只能读不能修改,var则可以修改。
val a:Int = 1
//等价于java: final int i = 10;
a = 2 // 错误,变量a是只读
var b:Int = 2
b = 15 // ok
kotlin中定义的变量的格式
[变量名]:[变量类型]
另一方面,kotkin中的整形既不是用int或Integer,而是使用Int,这里简单介绍一下kotlin中的基本类型:数字、字符、Boolean、数组和字符串
kotlin关键字 | 对应java关键字 | 说明 |
---|---|---|
Double | Double | 64位 |
Float | Float | 32位 |
Long | Long | 64位 |
Int | Integer | 32位 |
Short | Short | 16位 |
Byte | Byte | 8位 |
Arrya | Object[] | |
Boolean | Boolean | |
String | String | |
Any | Object | kotlin中使用Any来达到java中Object的作用 |
看来除了Int类型,其他的好像也和java中的差不多。这里只是简单与java中对比介绍一下,后面会专门介绍这些基本类型与java中的异同。
变量类型可以省略
对于在定义的时候同时初始化的变量,可以省略变量类型,kotlin会根据初始化的值进行变量类型推断
val a = 1 // a是Int类型,Long在则在后面加上L,如 10L
val b = 1.2 // b是Double类型,Float在后面加上f/F,如1.2f
val c = "test" // c是String类型
2.定义方法(function)
fun sum(a: Int, b: Int): Int {
return a + b
} fun myPrint(a: Int) {
print(a)
} fun main(args: Array<String>) {
print("sum of 3 and 5 is ")
println(sum(3, 5))
}
注意的是
- kotlin中任何东西都是对象,包括方法,所以方法的定义和变量类似
[方法定义]:[返回类型]{方法体}
- 如果没有返回,则可以省略返回类型(或者使用Unit)
- 参数传递过来的变量是只读的(val修饰)
fun someCall(a:Int){
a = 2 //error
}
3.null检查
在kotlin中,默认定义一个变量是不能为null
var a:Int = null //compile error var a:Int = someCallReturnNull() // runtiem excetion:KotlinNullPointerException
那如果允许空,则需要在变量类型后加上'?'例如
var a:Int? = null
方法的类似,如果定义方法
fun someCall(): Int {
return null //compile error
}
因为返回的类型为Int,是不允许为空的,如果要返回空怎么办呢,一样加上'?'
fun someCallWillReturnNull(): Int? {
return null //ok
}
如果我们定义了不能为空的类型,去接受可能返回空的函数怎么办,这个使用要用到另外一个符号'!!'
var a:Int = someCallWillReturnNull() //compile error
var b:Int = someCallWillReturnNull()!!
//变量也是同理 var c:Int? = null
var d:Int = c!! //当然这里肯定会跑出NPE,至少在编译到时候不会报错
其实可以简单理解,使用!!修饰的变量,如果为null就会跑出NPE.例如a!! 可以理解
if(a==null){
throw new NullPointExcetion();
}
空检测是kotlin的一个特点,他规定如果某些方法会返回null则在处理这些返回时需要注意,否则认为是null安全的(即不用检测null)
4.字符串模板
如果要在java中找个对应功能,可能就是String.format(),但是kotlin中的字符串模板更强大一点
var a = 1
// 简单的变量替换
val s1 = "a is $a" a = 2
// 在字符串模板中使用一些字符串方法
val s2 = "${s1.replace("is", "was")}, but now is $a"
5.条件表达式
if表达式
常规的用法和java中类似
fun max(a: Int, b: Int):Int{
var max: Int
if (a > b) {
max = a
} else {
max = b
}
return max
}
但是kotlin提供的一些语法糖,例如上面max等于a和b中的最大者,可以这样写
val max =if (a > b) { a} else { b }
注:kotlin总没有 ? : 三元运算符
进一步,如果方法返回a和b中的最大者
fun max(a: Int, b: Int) = if (a > b) {a} else {b}
可见变量和方法其实有很共性的(其实对于kotlin都是对象)
when表达式
取代java中switch,
when(x){
1 -> someCall1(x)
2,3 -> someCall2(x)
else -> someCall3(x)
}
6. 类型检查和转换
在java中,我们常常强转一个类型会这么写
if(obj instance MyObj){
MyObj myObj = (MyObj)obj;
myObj.someCall()
}
是不是感觉很冗余,kotlin抓住了这个痛点
if(obj is MyObj){
obj.someCall() //已经转换位MyObj类型
}
或者也可以这样
if(obj !is MyObj){
//do something
}
obj.someCall() //已经转换位MyObj类型
7.数字序列
kotlin中提供遍历一组数字序列,例如 1到100 可以表示为 1..100
for (i in 1..100) { ... }
8.集合操作
遍历
for (item in items) {
println(item)
}
kotlin遍历list或者map十分方便
//遍历list
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
//遍历map
for ((k, v) in map) {
println("$k -> $v")
}
检查某个对象是否在集合中
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
使用lambda进行集合操作
这个有点类似java8中的stream
lists
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
注:如果lambda的参数一个,可以省略,并且使用it来代替
小结
本人也是刚开始学习kotlin,上面只是对kotlin的一些基础用法进行简要介绍,大多参考官方文档。kotlin的还有很多高阶用法,后面还会继续些文章介绍,一方面可以自己学习kotlin,另一方面可以分享自己所学的东西,和大家一起交流
kotlin-30分钟快速入门的更多相关文章
- AngularJS 30分钟快速入门【译】
引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...
- Python 30分钟快速入门指南
学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.
- 30 分钟快速入门 Docker 教程
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 一.欢迎来到 Docker 世界 1. ...
- vue.js-vue入门教程教你如何html中使用vue(30分钟快速入门)
前后端分离.微服务框架是当下比较流行的词汇,而vue就是前端框架的佼佼者.下面重点介绍一下vue的用法: vue起步:1.引包 2.启动new Vue({el:目的地,template:模板内容 ...
- Vue.js——60分钟快速入门(转)
vue:Vue.js——60分钟快速入门 <!doctype html> <html lang="en"> <head> <meta ch ...
- 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门
Vue.js——60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...
- 一分钟快速入门openstack
一.它是什么,能干什么想认识一个事物,必须先弄明白它是什么,能干什么.首先说一下,openstack是一个搭建云平台的一个解决方案,说他不是个软件,但是我觉得说是一个软件,能够让大家认识更清晰些.op ...
- 30分钟快速掌握AngularJs
[后端人员耍前端系列]AngularJs篇:30分钟快速掌握AngularJs 一.前言 对于前端系列,自然少不了AngularJs的介绍了.在前面文章中,我们介绍了如何使用KnockoutJs来 ...
- Vue.js 60 分钟快速入门
Vue.js 60 分钟快速入门 转载 作者:keepfool 链接:http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下 ...
随机推荐
- FTP主动模式和被动模式的区别
基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...
- 学习web前端怎样入门?初学者赶紧看过来!
web前端怎么样才能入门,首先我们要从什么是初级web前端工程师说起: 按照我的想法,我把前端工程师分为了入门.初级.中级.高级这四个级别, 入门级别指的是了解什么是前端(前端到底是什么其实很多人还是 ...
- typecho for SAE
url:http://cloudbbs.org/forum.php?mod=viewthread&tid=22817 typecho和wordpress差不多,目前使用的用户非常之多.这里分享 ...
- python编写知乎爬虫实践
爬虫的基本流程 网络爬虫的基本工作流程如下: 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页 ...
- rovio 视觉里程计的笔记
rovio是一个紧耦合,基于图像块的滤波实现的VIO. 他的优点是:计算量小(EKF,稀疏的图像块),但是对应不同的设备需要调参数,参数对精度很重要.没有闭环,没有mapping thread.经常存 ...
- ionic2 tabs使用自定义图标
在ionic2中图标是通过类添加的 比如说 tabIcon="homeImg" 在页面中研究可以看到在ios上有一个类是 .ion-ios-homeImg:before 所以我 ...
- Unity3D常用 API 之 Invoke 函数调用
1.金钱副本细节完善 1.1.宝箱自动掉落 给宝箱预制体添加刚体组件即可. 1.2.实现按键宝箱批量掉落 ①将实例化生成宝箱的代码单独封装成一个函数: ②使用 for 循环,批量生成宝箱. 按一次z键 ...
- js移动端/H5同时选择多张图片上传并使用canvas压缩图片
最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...
- 用JS来实现于截取中英文混合字符串方法(转载)
网站制作过程中,提示层文字超出,需要JS做字符串截取,但是呢,我们常常会烦恼文字中英文混合如何判断,因为我们知道在JS中 string.length这个值是不考虑中英文的,但是计算机对中英文的识别是 ...
- java怎么发http请求
package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...