1.var 声明变量
var name : String = "凯特林"
// 类型后置化、可自动推到数据类型,所以可写成
var name = "凯特林"
2.val 声明不可被改变的变量
val name = "凯特林"
name = "小凯特林" // 会报错的,语法上val声明的变量是不可改变的
3.创建数组使用arrayOf()
// arrayOf()可放置的数据类型并没有要求一定要唯一
var array = arrayOf("张小斐",32,"女",false,true,2.3L)
// 当然同一类型当然更适合啦
val ages = arrayOf(15,23,32,43,17,19,10,8,22)
4.字符串,要使用" "表示,使用""" ... """.trimIndent() 来声明内容原样输出
// 字符串的表示只能是双引号"",和这里和Python是不一样的
var name = "凯特林"
// 使用""" ... """.trimIndent()来原样输出,就无须转义字符了,看示例
var poem = """
十年生死两茫茫,
不思量,
自难忘,
,,,
'Oh Yeah'
""".trimIndent()
//输出结果,如下
十年生死两茫茫,
不思量,
自难忘,
,,,
'Oh Yeah'
5.字符串中可以使用 $ 符号进行插值
var name = "凯特林"
var age = 12
// age外的{}是可以省略的
println("我的名字叫$name,今年${age}岁了")//输出结果为: 我的名字叫凯特林,今年12岁了
6.区间直接使用 1..5 、 'A'..'E'来表示也可以使用rangeTo()来表示
var range1 = 1..5
//注意是单引号哦
var range2 = 'A'..'E'
// 同样可以使用rangeTo()
var range3 = 1.rangeTo(5)
//如果不想包括尾部可以使用until
var range4 = 1 until 5 //表示的是 1,2,3,4
/**
*在这里我遇到一个朋友问我,他不想包括开头该用什么呢,我都愣了,我说“你是想实现1到5不包含1?”他说是的,我说区间之所以叫区间就是符合一定的规律来产生的一种方便代码输入的方式,不包含1为啥要从1开始算?直接2..5不就完了,哈哈😄
**/
// 使用downTo实现反序
var range5 = 5 downTo 1 //表示的是5,4,3,2,1
//使用step来表示步长
var range6 = 1..10 step 2 //表示的是1,3,5,7,9 (反序同样适用)
//判断某个值是否在一个区间内用 in
println(3 in 1..5) //返回结果 true
7.if else 判断条件 是含有结果的
var age = 23
var name = if(age > 30) "老王" else "小王"
// 上面是简单写法,如果我们不只是需要返回结果,还要在符合条件时候做一些处理
var name = if(age >30){
println("老王需要做的事")
"老王"
}else{
println("小王需要做的事")
"小王"
}
//我们上面的例子是我们声明 name 如果条件判断最后没有返回值,这个时候打印name会是kotlin.Unit
//当然了,我们在处理事件流程的时候我们不要返回值的时候就不需要返回一个值啦,比如上面的代码去掉 var name =
8.When条件判断
//类似Java中的switch方法
var choose = "A"
var result = when(choose){
"A" -> "not A"
"B" -> "not B"
"C" -> "yes C"
"D" -> "not D"
else -> "did not find the choose"
}
//不一定要是准确的值才能判定,它可以是任意的表达式
var age = 10
var address = when(age){
in 0..18 -> "少年"
in 19..30 -> "青年"
in 31..60 -> "中年"
else -> "老年"
}
9.循环for 、forEach、while、do..while
//for循环
for(i in 1..5){
println(i)
}
//forEach循环
1..5.forEach{
println(it)
}
//while循环
var i = 5
while(i > 0){
println(i)
i --
}
//do..while循环
var j = 5
do{
println(j)
j --
}while(i > 0)
10.循环中的中断和返回问题(常见的嵌套循环,和方法中的循环)
// 举个例子双重for循环中,跳出问题
for(i in 1..5){
for(j in 1..5){
println(j)
if(j =2)
break
// 这里子中break其实就是跳出了内层for循环,不会中断外层的循环,也就是说
// 在这里i = 1的时候 j从1开始循环到5,当j循环到2的时候跳出了内循环,
//这时候会继续外循环,也就是i = 2的时候 j从1到5再循环
}
println(i)
}
// 这个时候假如你想当符合条件是跳出所有的循环也就是跳出外循环怎么办呢?
//我们需要给外循环做个标记到时候直接break出标记就好了,看代码
out@for(i in 1..5){
for(j in 1..5){
println(j)
if(j =2)
break@out//我们给外循环做了个标记out(标记名称随便起)符合条件是我们直接break@out就跳出了外循环
}
println(i)
}
//方法中的forEach返回问题,举个例子
fun foo(){
listOf(1,2,3,4,5).forEach{
if(it == 3) return //在这里return的其实是foo()方法 打印结果为 1、2
println(it)
}
println("forEach完了之后")
}
// 我们如果不想一下就跳出方法呢?来看 ⭐️⭐️⭐️⭐️⭐️(星级提醒)
fun foo(){
listOf(1,2,3,4,5).forEach{
if(it == 3) return@forEach //我们在这里加上了 @forEach,⭐️⭐️⭐️看好⭐️⭐️⭐️
// 重点来了,当我们加上@forEach之后他其实并不是跳出了forEach循环,你应该理解为它是跳出了forEach循环的单次操作
// 看这个例子,我们在 it == 3的时候@forEach这个时候println(3)就不执行了,因为人家return了,但是人家会接着执行 it=4的时候和it= 5的时候。
//所以这里的打印结果为 1、2、4、5
println(it)
}
println("forEach完了之后")
}
// 那我们要是想完全跳出forEach但又不跳出foo()方法呢?看,我们给forEach做个标记
fun foo(){
run out@{//我们在forEach外面套了一层run 并做了标记
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@out //这个时候我们跳出的就是外层的run也就相当于跳出了forEach循环
//这种处理方式结果就为 1、2、forEach完了之后
print(it)
}
}
println(“forEach完了之后”)
}