本文出自链接: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. 使用.NET6打造动态API

    ApiLite是直接将Service层自动生成api路由,可以不用添加Controller,支持模块插件化,在项目开发中能够提高工作效率,降低代码量. 开发环境 .NET SDK 6.0.100-rc ...

  2. (二)lamp环境搭建之编译安装mysql

    mysql 编译安装1,在网站上下载: wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz 2,安装cmake ...

  3. ssl 原理和建立连接过程

    ssl ("Secure Sockets Layer")加密原理 和https的关系https = http + ssl ssl 位置: SSL握手 证书主要作用是在SSL握手中, ...

  4. Spring源码学习之容器的基本实现(一)

    前言 最近学习了<<Spring源码深度解析>>受益匪浅,本博客是对学习内容的一个总结.分享,方便日后自己复习或与一同学习的小伙伴一起探讨之用. 建议与源码配合使用,效果更嘉, ...

  5. 自动下载MarkDown格式会议论文的程序

    近期师兄发给我一个压缩包让我整理文献,而我发现压缩包里的内容是这样: 这样: 和这样的: 我大概看了一下,可能有270多篇文章是这种格式,俗话说的好,没有困难的工作,只有勇敢的研究僧.所以决定用Pyt ...

  6. 执行对象Statement、PreparedStatement和CallableStatement详解

    执行对象是SQL的执行者,SQL是"安排好的任务",执行对象就是"实际工作的人". 执行对象有三种: Statement.PreparedStatement和C ...

  7. 直播预告 | 猪齿鱼V1.1发布,线上新功能详解邀您参加

    2021年11月11日,数智化效能平台猪齿鱼 Choerodon发布 V1.1版本,多项功能新增或优化,多管齐下,全面提升团队工作效能! 通过提供体系化方法论和协作.测试.DevOps及容器工具,猪齿 ...

  8. [hdu7076]ZYB's kingdom

    不难发现,操作1可以看作如下操作:对于删去$a_{1},a_{2},...,a_{k}$后的每一个连通块(的点集)$V$,令$\forall x\in V,x$的收益加上$s$(其中$s=\sum_{ ...

  9. [hdu7012]Miserable Faith

    类似于[NOI2021]轻重边的逆过程,操作1即为对$u$​执行access(根为1),$dist(u,v)$​即为$u$​到$v$​的虚边数 对前者用LCT维护,并记录轻重边的切换,显然切换总量为$ ...

  10. [bzoj4943]蚯蚓排队

    询问相当于要求长度为k的公共子串个数,很容易联想到hash,由于询问是对全局的,因此对全局开一个hash的桶对于合并/删除操作,将中间新产生/需要删除的字符串暴力修改即可,单次复杂度最坏为$o(k^{ ...