重复的专家:回圈 repeat , for loop, while loop, do while loop

下过雨的天空,星星特别明亮。

唯心提着包离开了研究室,今晚的补课依旧在空教室进行。

「还记得你写的重复十次Hello World!的程序吗?」

诗忆点点头。「记得学姐提过,有其他更好的方式可以实现。」

fun main() {
    println("Hello World!")
    println("Hello World!")
    println("Hello World!")
    //...省略中间重复行数
    println("Hello World!")
}

「嗯,这个方式就是回圈,回圈是重复的专家。不过Kotlin的回圈不只一种,最简单的是repeat。」唯心迅速地更新了程序码。

fun main() {
    repeat(10) {
        println("Hello World!")
    }
}

原本需要十行的程序码,现在只剩下三行。

「这⋯⋯真的是好简单易懂啊。」诗忆惊喜的睁大眼睛。

「不过,这样对次数的观察不太直观,所以我们就改成列印回圈变数,数字也减到五次吧,可以直接用预设的名字it或是用->另外帮变数命名。」唯心把程序码独立成函式另外命名成repeat5

fun repeat5() {
    repeat(5) {
        println(it)
    }
}
fun repeat5index() {
    repeat(5) { index ->
        println(index)
    }
}

「印出来的回圈变数是0, 1, 2, 3, 4,确实是五次。但是五其实也有很多种组合,在某些时候我们会希望的是1, 2, 3, 4, 5,这时可以改用for搭配rangeTo()。」

诗忆重复看了好几次程序码。「嗯?学姐我没在你的程序码里看到rangeTo()函式啊?」

「喔,和之前说的四则运算子逻辑一样,这个..符号就是rangeTo函式的简写。」唯心在程序上加上了注解。

fun for1to5() {
    for (index in 1..5) { //就是 1.rangeTo(5)
        println(index)
    }
}

for还可以跳着数、倒着数,比如十以下的奇数数量也是五。」唯心兴致来了,举出各种例子。

fun for1to10奇数() {
    for (index in 1..10 step 2) {
        println(index)
    }
}
fun for1to9倒着数奇数() {
    for (index in 9 downTo 1 step 2) {
        println(index)
    }
}

「有时候拿到的结束数字比范围大,可以自行减掉再用刚刚的rangeTo()或是直接就用until,因为until不含上限。」

「什麽时候会结束数字比范围大啊?」诗忆好奇地问。

唯心指了指最初的程序码。「之前不是提到预设的索引是0开始吗?所以相对於整个群体的数量,最後一个索引就是数量减一。」

fun for1until6() {
    for(index in 1 until 6) {
        println(index)
    }
}

「而另一种回圈while,在做到和for同样的事时,写起来比较繁琐,所以我们通常是用在for不能做到的地方,那就是只确定结束条件,不确定次数的情形。例如,需要等待其他函式回传的结果来结束回圈,所以也存在while(true)的设计,这时会搭配break跳出回圈,咳。」

fun while5() {
    var index = 0
    while(index < 5) {
        println(index)
        index++
    }
}

诗忆听唯心的嗓音有些沙哑,急忙倒出保温瓶里的温水递给她。

唯心喝了几口温水後休息了一会儿,才继续说下去。

「最後一种回圈do while,表面上和while结果相同,但是有一个相当特殊的特性,就是至少会跑一次,所以就算是while(false)这种极端的例子,也会印出0。」

fun dowhile5() {
    var index = 0
    do {
        println(index)
        index++
    } while(index < 5)
}

<<:  Material UI in React [ Day 18 ] Drawer (侧边栏)

>>:  【把玩Azure DevOps】Day7 CI/CD从这里:设定第一个Pipeline(范本与编辑介面介绍)

Day05_客倌~要不要来一块小叮当的翻译蒟蒻XD"

阿~今天的笔记,真心觉得,给我来一口翻译蒟蒻吧,很多硬梆邦的东西,记不起来XD" ▉条文是...

必然 (3) 认知ing - cognifying

让无生命的东西得到认知能力,仔细一看发现这节在讲 AI 的趋势...............深蓝和华...

[Day 30] 完赛心得

前言 很开心能够确实每天发文,并且持续30天成功完赛! 虽然这些天的发文大多都是过去学习中累计下来的...

Ruby on Rails 模组(Module)

如果我有一个小猫类别,我想要这个小猫类别有飞行功能,你会怎麽做? 直接写一个有飞行功能的小鸟类别,然...

【第九天 - 数字型 SQL注入】

Q1. SQL 注入 是什麽? SQL 注入攻击也称为 SQL injection,网页有许多功能都...