本文出自链接:https://www.jianshu.com/p/ef9584a8ebf8

Kotlin的插件安装:

Settings->Plugins->Browse Repositories->搜索Kotlin

Kotlin语法:

1、定义函数:

与Java定义函数的区别在于:Kotlin在定义函数的时候要加fun关键字,函数的返回值前后不同,java的在前面,如

    private int getResult(int a, int b) {
return a + b;
}

  Kotlin的返回值在后面:

    private getResult(a: Int, b: Int): Int {
return a + b
}

 如果一个函数只有一个表达式函数体并且是返回类型自动推断的话,可以直接这样写 

    fun getResult(a: Int, b: Int) = a + b
// 这里的函数没有写返回值,以为Kotlin会自动判断返回值类型

如果函数返回一个无意义的值,相当于Java的void,则可以这样写

    fun getResult(a: Int, b: Int) {
print(a + b)
}

2、定义局部变量

Kotlin声明变量与Java声明变量有些不一样,Java变量类型在前,变量名在后,而Kotlin则相反,变量名在前,变量类型在后,中间加:(冒号),并且Kotlin可以自动判断变量的类型。

声明局部常量(常量使用val关键字)

val a: Int = 1
val b = 1 // 自动判断出Int类型
val c: Int // 当没有初始化值的时候要声明类型,全局变量不能这样写
c = 1 // 赋值

声明变量(变量使用var关键字)

var x = 5 // 自动推断出Int类型
x += 1

3、注释和java一样,当行注释和块注释  // 和/** **/

4、使用字符串模板

使用${变量},如变量为args: Array<String>,使用的时候可以这样写

fun main(args: Array<String>) {
if (args.size == 0) return print("First argument: ${args[0]}")
}

而不用再去用加号加起来,gradle里面也是支持的

fun main(args: Array<String>) {
if (args.size == 0) return print("First argument: " + args[0])
}

5、使用可空变量和空置检查(Using nullable values and checking for null)

当一个变量、函数可能出现空值的时候,应该指出该引用可空,如

fun getResult(a: Int, b: Int): Int? { // 设置函数返回类型可空
print(a + b)
return null
}

6、使用类型检查和自动转换(Using type checks and automatic casts)

is运算符是检查一个表达式是否是某个类型的实例,如果为不可变局部变量或属性进行类型检查,则无需显式转换

fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj`在这个分支中自动转换为`String`类型
return obj.length
} // `obj`仍然是`Any`类型
return null
}

7、使用for循环

fun main(args: Array<String>) {
for (arg in args) { // in操作符可以判断是否arg是否在args里面
print(arg)
}
}

或者

for (i in args.indices) {
print(args[i])
}

8、使用when表达式

when表达式就相当于Java的switch表达式,省去了casebreak,并且支持各种类型。

fun cases(obj: Any) {
when (obj) {
1 -> print("One") //如果obj的值为1
"Hello" -> print("Greeting") // 如果obj的值为hello
is Long -> print("Long") // 如果obj的类型是Long类型
!is String -> print("Not a string") // 如果obj的类型不属于String类型
else -> print("Unknown") // 默认,相当于switch的default
}
}

9、使用ranges

使用in运算符检查数字是否在范围内,使用!in运算符检查数值是否在范围外

if (x in 1..y-1) { //1..y-1表示1到y-1的范围
print("OK")
}
for (i in 1..100) { ... } // 1到100范围
for (i in 1 until 100) { ... } // 半开范围,不包括100,相当于[1,100)
for (x in 2..10 step 2) { ... } // 每次夸2,内容为2,4,6,8,10
for (x in 10 downTo 1) { ... } // 返序
if (x in 1..10) { ... }

10、使用集合

循环输出一个集合里面的值或者判断集合里面是否包含某个变量

for (name in names) { // 将会调用nemes.contains(name)方法
println(name)
}

使用lambda表达式过滤和映射集合

// it表示name
names
.filter { it.startsWith("A") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }

Kotlin 学习(1)的更多相关文章

  1. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  2. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  5. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  6. kotlin学习-初次见面

    第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...

  7. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  8. kotlin学习(二)——类

    Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...

  9. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

  10. kotlin学习一:kotlin简介

    kotlin是JetBrains公司出品的基于JVM的语言,和其他JVM语言一样,目的在于提供比JAVA更加简介的语法, 同时提供函数式编程,不需要再像JAVA一样所有的一切都要依托于类. kotli ...

随机推荐

  1. linux 文件描述符和inode 的理解和区别

    inode 或i节点是指对文件的索引.如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等.就像书本的目录一样,便于查找和管理.这目录是操作系统需要 ...

  2. 力扣 - 剑指 Offer 66. 构建乘积数组

    题目 剑指 Offer 66. 构建乘积数组 思路1 按照一般的思路就是将所有的相乘,然后除以每一位数字就是答案,但是题目要求我们不能使用除法,因此我们会想到每次遍历到每个数字的时候,在遍历一遍数组, ...

  3. systemd-nspawn以及container的学习

    container的分类 目前container可以分为两大类,一类是Privileged container,一类是Unprivileged container. Privileged contai ...

  4. PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分)

    PTA 6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 (6分) 函数接口定义: 函数接口为: void dgree(MGraph G); G为采用邻接矩阵作为存储结构的有向图 裁判测试程序样例 ...

  5. MyBatis Plus中使用and和or

    如图:show me the code 参考: https://mp.baomidou.com/guide/wrapper.html#or

  6. gcc: fatal error: limits.h: No such file or directory on macos

    重装gcc brew install gcc 软链接链到新的gcc和g++ https://stackoverflow.com/questions/56280122/gcc-fatal-error-l ...

  7. [hdu7062]A Simple Problem

    称序列$\{a_{1},a_{2},...,a_{n}\}$​的答案为$\min_{0\le i\le n-k}(\max_{i<j\le i+k}a_{j})$​​(特别的,若$n<k$ ...

  8. [loj2863]组合动作

    先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1.c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符 询问:s+c1和s+c2, ...

  9. SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(下)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节,继续使用 spock 测试我们自己封装的 WebClient 测试针对 r ...

  10. 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup

    审计代码 传入参数a,进入parserIfLabel函数 发现参数a的模板,a的格式要匹配pattern,如{if:payload}{end if} 可知ifstr是a中匹配的第一组的值,即paylo ...