首先Kotlin是可以运行再JVM中的,因为Kotlin可以编译成class,可以调用Java的库,有一定的关联程度。但是本质上上来说还是一门不同的语言,这一点要清楚。不要生硬去联想对应是Java的什么什么的。当然会有一定的关联,但那都是熟练之后考虑的事情。
hello wrold!
1 | fun mian(args: Array<String>) { |
首先kotlin文件main函数的入口不需要定义类,充分说明了kotlin是支持函数式编程的。
现代化语言不需要分号分隔行结尾
函数声明方式是形如
1 | fun funName(argName: ArgType): ReturnType { |
变量声明,采用后置形式,反正有关类型定义都是后置。不论是形参变量、变量、函数变量
1 | fun setName(name: String){}//形参变量后置声明 |
基本类型
Kotlin的所有东西都是对象,基础类型也是对象。所以基本类型也是可以调用成员函数的。
数字
Byte1字节Short2字节Int4字节Long8字节Float4字节Double8字节
1 | val one = 1//Int |
- 首先量的声明有
val表示value值,也就是常量,var表示variable值,也就是变量。 - 量的类型可以根据右值进行自动推断。浮点值默认推断为Double,整数默认推断Int除非超过范围推断为Long,其它需要自行类型约束
- 给值添加后缀表示类型
F、L
字面量
1 | val a = 10//十进制 |
tips:无八进制
表达方式
Kotlin默认类型是非空,就是不可以为null。但是JVM原生类型是可以为空的
1 | val boxA: Int? = 10//通过再类型加上?表示为可空类型 |
转换
kotlin不会隐式拓宽的,再运算式内会拓宽,这一点编程语言基本一致
1 | fun test(num Double) { |
显示转化
直接使用toXXX即可
1 | val a: Int = 6 |
位运算
1 | shl //有符号左移 |
其实都是中缀函数
字符
1 | val a: Char = 'a' |
布尔
仅用true和false
1 | val a: Boolean = true |
逻辑操作符
||短路或&&短路与!逻辑非
数组
在kotlin中数组使用Array类表示
1 | class Array<T> private constructor() { |
使用set、get函数设置或获取,同时可以运算符重载语法
1 | val array = Array(5){x->x}//通过new对象传入lmbda表达式进行构建对象 |
原生数组类型
当然Java中是存在非类基本数值,Kotlin中也有对应的原生数组,通过相应的工厂方法进行构建
它们对应的类型是IntArray、ShortArray等,它们和Array是不存继承关系的,对应着原生数组类型
1 | val array = intArrayOf(1,2,3) |
字符串
字符串字面值
普通,存在转义
1 | val stringA = "hello world! \n"//可以存在转义字符 |
原始字符串,无转义,使用三引号包围,里面是怎么样表现的,输出就是怎样的。
1 | val stringB = """ |
输出
1 |
|
当然是可以修剪trim,trimMargin通过特定字符裁剪,trimIndent缩进裁剪
字符串模板
加上$后在字符串中可以表现位一个变量使用了,复杂情况下使用括号限定,因为$在模板里属于特殊符,想要打出来就如下。
1 | val a = 10 |
虽然Java里面没有这个,PHP中倒是用的不少,所以有些亲切,反正各个语言基本上都有那么几个相似的地方。
包和导入
这个就基本和Java一样了。不过Java没有别名语法,kotlin理由
1 | import org.example.Test as MyTest |
控制流
特别注意,在kotlin中if和when不只是控制结构,同时也是表达式
if
1 | //普通用法 |
when
其实也就是分支符switch一样的功能
1 | when(x) { |
分支条件不一定是常量
1 | when(x) { |
甚至可以进一步简化
1 | when { |
表达式,和if表达式使用类似,也是必须要要else结构
1.3后when括号里面可以声明变量,并且用于when作用域
1 | fun Request.getBody() = |
for
1 | for (item in items) //对迭代器迭代 |
while
这个就是老套路
1 | while(x > 2) { |
返回与跳转
return
break
continue
标签返回
1 | loop@ for (i in 1..100) { |