世界上没有最好的编程语言,就像世界上没有最好的人一样。
如果你想知道一门编程语言的优劣,那就去学会它。
用Kotlin也快一年,最近总觉的对它熟悉又陌生,不由的重新学习一下这门语言。
这门语言最舒服的地方
- 可空类型:判空的代码省了
- when,强大的分支结构:已知的编程语言中最强
- if,可以做为表达式: 不用再另外生命变量
- object,语法层面的单例
- 闭包,很实用
整体介绍
- 开发工具
- Intellij IDEA:
- Sublime Text:
- Vscode:
- 面向过程
- 基本语法和规范
- 变量
- var a = “hello”
- 常量
- val a = “name” // 运行期常量
- const val co = “常量” //编译器常量,只能用于顶层常量或对象中的常量声明,只能是String和基础数据类型
- 注释
- // 单行注释
- /* 块注释 */
- /* /嵌套注释/ */
- 文件注释
- 版权信息
- 许可信息
- 描述
- 历史版本
- 文档注释: 公开SDK
- Kdoc
- @author
- @deprecated
- @param
- @return
- @version
- Kdoc
- 代码注释: 阅读源码参考
- 地标注释: IDE提供的功能
- //TODO: 代码未完成
- //FIXME: 代码错误,待修正
- 命名规范
- 包名: 全小写,可用点分割
- 类名、接口: 大驼峰
- 文件名: 大驼峰
- 变量名: 小驼峰
- 编译器常量: 全大写,可以加下划线
- 函数名: 小驼峰
- 代码排版
- 空行
- 代码注释之后(除尾端注释)
- 函数内第一条语句之前
- 一个函数内部两个逻辑段
- 类声明或接口声明之间
- 空格
- 赋值符号
- 二元运算符
- 小括号前后
- 函数参数之间
- 类继承,接口实现
- lambda表达式大括号左右
- 缩紧
- 4个空格
- 断行
- 逗号后,运算符前
- 类声明时
- 省略
- 分号
- 省略Unit
- lambda参数
- 空行
- 变量
- 数据类型
- 整数
- Byte
- 8位
- -128~127
- Short
- 16位
- -2 ^ 15 ~ 2 ^ 15 - 1
- Int
- 32位
- -2 ^ 31 ~ 2 ^ 31 -1
- Long
- 64位
- -2 ^ 63 ~ 2 ^ 63 -1
- Byte
- 浮点数
- Float
- 32位
- 3.0F
- Double
- 64位
- 默认小数为double
- 科学计数
- 3.14e15
- Float
- 字符类型
- Kotlin字符采用双字节Unicode编码(16位)
- 可以使用16进制表示
- val a = ‘A’
- val b = ‘\u0041’
- val c = ‘码’
- 制表符
- \t \u0009 Tab
- \n \u000a 换行
- \r \u000d 回车
- " \u0022 双引号
- ' \u0027 单引号
- \ \u005c 反斜线
- $ \u0024 美元符号
- \b \u0008 退格
- 布尔类型
- true
- false
- 数据类型之间的转换
- toXXX(): 转换函数
- ⚠️ 大范围转小范围会存在进度丢失的风险
- 隐式转换优先度: double > float > Long > Int
- 可空类型
- 防止空指针异常
- 可空运算
- 安全调用运算 ?.
- as?
- Elvis运算符 ?:
- 非空断言!!
- let
- 字符串类型
- 普通字符串
- 原始字符串
- 可以包含任何字符,不能包含转移字符
- == 判断两个对象内容是否相等
- 不可变字符串
- 字符串操作
- 拼接
- a + b
- 模版
- $x
- 查找
- indexOf: 从x开始往后查
- lastIndexOf: 从x开始由后向前查
- 比较
- 相等
- 比较大小
- 比较前后缀
- 字符串截取
- 区间截取: 左闭右开区间
- 拼接
- 可变字符串
- StringBuilder
- 追加
- 插入
- 删除
- 替换
- 正则表达式
- Regex
- 字符串匹配
Regex(""""\d+""").matchs("1233")
- 字符串查找
Regex(""""\d+""").find("1233")
- 字符串替换
Regex("""\d+""").replace("123mmm", "")
- 字符串分割
Regex("""\d+""").split("123mmm")
- 整数
- 运算符
- 算术运算符
- 一元运算符
- 取反符号:
-a
- 自加:
++
- 自减:
--
- 取反符号:
- 二元运算符
a + b
a - b
a * b
a / b
a % b
- 算术赋值运算符
a += 1
a -= 1
a *= 2
a /= 2
a %= 2
- 一元运算符
- 关系运算符
== 、>、<、>=、<= 、===、!==
- 逻辑运算符
&&、||
- 位运算符
inv 位反
and 位与
or 位或
xor 位异或
shr 有符号右移
shl 左移
ushr 无符号右移
- 其他运算符
Class A : B()、()、[]、.=、?、?.、?:、!!、::、..、-> 、*
- 运算符优先级(从高到低)
()
++ 、-- 、 . 、 ?. 、?
-、 + 、 ++ 、-- 、!
:、as、as?
* 、 / 、%
+、-
..
中缀运算符
Elvis运算符 ?:
in、!in、is、!is
<、>、<=、>=
==、!=、===、!==
&&
||
=、+=、-=、*= 、/= 、%=
- 算术运算符
- 控制流
- if
if(true) a = 1
val a = if(true) "" else null
- when
when() {}
val a = when(name)
while {}
do {} while
for () {}
- break
label@ for (x in 0..8) {
-
for (y in 0..8) {
-
if (x == y ) {
-
break@label
-
}
-
}
- continue
label@ for (x in 0..8) {
-
for (y in 0..8) {
-
if (x == y ) {
-
continue@label
-
}
-
}
}
- if
- 函数
- 函数声明
- 命名参数
fun add(a: Int, b: Int): Int {
-
return a + b
}
- 默认参数
fun add(a: Int, b: Int, c: Int = 1): Int {
-
return a + b + c
}
- 可变参数
fun add(vararg numbers: Int): Int {
-
var total = 0.0
-
for (number in numbers) {
-
total += number
-
}
-
return total
}
- 表达式函数
fun area(x: Int, y: Int) = x * y
- 局部函数
fun func() {
-
fun func() {
-
}
}
- 匿名函数
val oneF = fun(x: Int, y:Int): Int = x * y
- 基本语法和规范
- 面向对象
- 类
- 封装
- 继承
- 多态
- 抽象类/接口
- 类
- 函数式编程
- 高阶函数
- Lambda
- 闭包
- 内联函数
- 范型
- 数据容器
- 函数式API
- 通用模式
- 异常处理
- 线程
- 协程
- I/O
- 文件管理
- 网络编程
- GUI编程
- Java特性
- 反射
- 注解