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分钟快速入门的更多相关文章

  1. AngularJS 30分钟快速入门【译】

    引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...

  2. Python 30分钟快速入门指南

    学习地址 中文版:Python 30分钟入门指南 英文版:Learn X in Y minutes 学习时间 2019/03/10 19:00 - 19:32,多用了2分钟.

  3. vue.js-vue入门教程教你如何html中使用vue(30分钟快速入门)

    前后端分离.微服务框架是当下比较流行的词汇,而vue就是前端框架的佼佼者.下面重点介绍一下vue的用法: vue起步:1.引包    2.启动new Vue({el:目的地,template:模板内容 ...

  4. Vue.js——60分钟快速入门(转)

    vue:Vue.js——60分钟快速入门 <!doctype html> <html lang="en"> <head> <meta ch ...

  5. 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门

    Vue.js——60分钟快速入门   Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...

  6. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world

    2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...

  7. 一分钟快速入门openstack

    一.它是什么,能干什么想认识一个事物,必须先弄明白它是什么,能干什么.首先说一下,openstack是一个搭建云平台的一个解决方案,说他不是个软件,但是我觉得说是一个软件,能够让大家认识更清晰些.op ...

  8. 30分钟快速掌握AngularJs

    [后端人员耍前端系列]AngularJs篇:30分钟快速掌握AngularJs   一.前言 对于前端系列,自然少不了AngularJs的介绍了.在前面文章中,我们介绍了如何使用KnockoutJs来 ...

  9. Vue.js 60 分钟快速入门

    Vue.js 60 分钟快速入门 转载 作者:keepfool 链接:http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下 ...

  10. 30分钟快速搭建Web CRUD的管理平台--django神奇魔法

    加上你的准备的时间,估计30分钟完全够用了,因为最近在做爬虫管理平台,想着快速开发,没想到python web平台下有这么非常方便的框架,简洁而优雅.将自己的一些坑总结出来,方便给大家的使用. 准备环 ...

随机推荐

  1. ionic 启用sass

    转入ionic项目目录,命令行下执行:ionic setup sass 提示编译器未装: You have specified Ionic CI to set up sass.However, you ...

  2. jenkins---配置邮件

    如果出现以下错误: 553 mail from must equal authorized user 看看管理员邮箱是否配置: 再测试,就能够正常收到邮件了!

  3. SQL Server Bulk Insert批量数据导入

    SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快.远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP ...

  4. cnblogs 主题 summerGarden redesign

    Intro cnblogs 的 summerGarden 主题是一个宽屏版的,而且设计虽然很Qzone风格,不过我个人喜欢「简单,扁平」的设计风格,所以就修改了一下样式. before after r ...

  5. Opencv 2.4.10 +VS2010 项目配置记录

    http://blog.csdn.net/scottly1/article/details/40978625?utm_source=tuicool 因为工作需要,小小的研究一下Opencv的图像处理, ...

  6. Candy Store

    Candy Store Time Limit: 30000ms, Special Time Limit:75000ms, Memory Limit:65536KB Total submit users ...

  7. 简单几何(线段与直线的位置) POJ 3304 Segments

    题目传送门 题意:有若干线段,问是否存在一条直线,所有线段投影到直线上时至少有一个公共点 分析:有一个很好的解题报告:二维平面上线段与直线位置关系的判定.首先原问题可以转换为是否存在一条直线与所有线段 ...

  8. php随机数怎么获取?一个简单的函数就能生成

    小美女建了一个站,有些页面相似度比较高,想添加一些字段来实现差异化,比如用php随机数生成从10到100之间随机一个数字.其实会php的朋友几十个字符就能实现了,如下代码所示,简单吧?10代表最小值, ...

  9. Anipang2反推文档

    此文档主要用于一个开发同学尝试学习描述一个产品的基本设计.也许工程师都应该有类似能力. 反推的基础,目前是自己玩过的一些关卡和youtube上的一些关卡通关视频,主要是前120关.(120关后面应该是 ...

  10. RxJS -- Subscription

    Subscription是什么? 当subscribe一个observable的时候, 返回的就是一个subscription. 它是一个一次性对象(disposable), 它有一个非常重要的方法 ...