kotlin有说好有说坏,出来这么久了,也没研究过,趁着公司给机会,好好学学,学明白了才有资格说好赖
买了本郭神的第三版第一行代码,每天看看纪录纪录笔记,学习学习冲冲冲!!!!
基本语法
1.变量
变量分为val和var
val可以理解为java中的final Object
var可以理解为java中的Object
只有这两个,因为它可以自动推断你的数据类型,当然你也可以自己指定数据类型拿基础类型举例子
//自动推断写法
val a = 10
//自行指定类型
var a = 10 : Int
上边这两行意义是相同的
自动推断不仅仅适用于基础类型,自建对象也是没问题的
基础类型跟java也不太一样
kotlin里边的基本类型Int,Long,Double,Float,Byte,Boolean,Short,Char
就是java里边的基础类型首字母大写,其实kotlin里这些也不算基础类型了。kotlin给他们都封装成对象了
2.函数
fun main() {
val a = 1
val b = 2
val value = subNum(a, b)
println("sub is " + value)
}
fun subNum(num1: Int, num2: Int): Int {
return num1+num2
}
//语法糖只有一行时,函数体可省略
fun subNum(num1: Int, num2: Int): Int = return num1+num2
//kotlin又会自动推导,返回值和return也可省略,最终就生了个行这么个玩意
fun subNum(num1: Int, num2: Int) = num1+num2
还有一点 函数里能写函数
fun main() {
fun subNum(num1: Int, num2: Int) = num1+num2
val a = 1
val b = 2
val value = subNum(a, b)
println("sub is " + value)
}
这么写也是没问题的,就是我感觉真撸项目的时候,大逻辑函数别这么搞,得吐
3.逻辑控制语句
先说if 跟java差不多 不过比java多了一个返回值。if逻辑体里的最后一行会当作返回值返回
比如
val a = 1
val b = 2
//取ab最大值 java写
int value;
if (a > b) {
value = a;
} else {
value = b;
}
//kotlin可以这么写
value = if (a > b) {
a
} else {
b
}
//也可以这样,有点像三元运算符哈哈
value = if (a > b) a else b
再说when 跟switch差不多 ,不用写break,支持比对对象,比对类型
上实例
//跟if一样也是逻辑体最后一句当返回值,并且单行逻辑的时候可以精简成这样 else相当于default
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
}
//判断类型,is相当于java中的instanceof
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
逻辑语句不是太难理解 就是好多时候加上语法糖读起来慢,熟练了应该就好了
4.循环语句
while基本同java
for变化挺大
说for之前先说区间,这是个新概念
//这就是个区间 从小到大用..链接
//..表示双端闭区间也就是包含0包含10
var a = 0..10
//until左闭右开区间 包含0不包含10
var a = 0 until 10
//downto降序双端闭合区间
var a = 10 downto 0
//用for遍历区间的话这样,类似foreach
for(i in 0..10){
print(i)
}
//可以用step关键字来控制循环 相当于java for-i循环中i = i + 2的效果
for(i in 0..10 step 2){
print(i)
}
感觉for-in循环没有java fori灵活
简单记录了下学习变量跟函数的笔记
类
挺有趣的,kotlin没有new了 实例化对象的时候直接写类名就好了加上构造函数里可以生命类成员变量,最终可能出现这样的类
//就这样,啥也没了,这就是一个实体类包含两个变量name和price
class Phone(var name: String, var price: Double)
fun main() {
val phone = Phone("华为",100.0);
phone.name="小米"
phone.price=90.0
}
//class 前边可以用data修饰,用了后系统会默认帮你实现equals()、hashCode()、toString(),这点很nice
//还有一点class默认不允许被继承,如果想让他当父类需要用open修饰,kotlin限制住了很多不安定因素
集合
mutableListOf()生成一个非final的list集合
listOf()生成一个final的集合
也就是
//简单易懂
val list=listOf(1,2,3,4,5)
var list=mutableListOf(1,2,3,4,5)
集合有一些比较不错的函数
maxby 求极值
map 集合转换
filter 筛选
any集合中是否有满足指定条件的值
all集合中是否都满足指定条件
//取集合中长度最大的值
val maxLengthFruit = list.maxBy { it }
//集合每个值+1
val newList = list.map { it + 1 }
//取小于三的集合
val newList = list.filter { it <3 }
//是否全小于三
val boolean = list.all{ it < 3 }
//是否有小于三的元素
val boolean = list.any{ it < 3 }