Kotlin学习划重点1 --- 基本类型和流程控制

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完了之后”)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容