📜  Kotlin 中的多条件循环

📅  最后修改于: 2022-05-13 01:54:28.544000             🧑  作者: Mango

Kotlin 中的多条件循环

众所周知,在 Kotlin 中,循环会尽可能地编译为优化的循环。例如,如果您遍历一个数字范围,则字节码将根据普通 int 值编译为相应的循环,以避免创建对象的开销。条件循环对于您选择的任何编程语言都很常见。如果将多个条件应用于循环,则称为多条件循环。 Java中的多条件循环的一个简单示例如下所示:

Kotlin
import java.io.*;
  
class GFG {
    public static void main (String[] args) {
      int [] data = {5, 6, 7, 1, 3, 4, 5, 7, 12, 13};
      for (int i=0; i<10 && i < data[i];i++) {
        System.out.println (data[i]);
      }
   }
}


Kotlin
(0..9) .asSequence ( ) .takeWhile {
  it


Kotlin
(0..9).takeWhile {
  println{"inside takewhile"}
  it


Kotlin
(0..9).asSequence().takewhile {
  printin ("Inside takewhile")
  it 


前面的执行代码会打印出 5、6 和 7。让我们看看如何在 Kotlin 中使用多条件循环。我们将在 Kotlin 中研究同一事物的函数式方法

例子

前面的多条件循环可以用 Kotlin 编写,如下所示:

科特林

(0..9) .asSequence ( ) .takeWhile {
  it

它很好,很干净,绝对不碍眼。

  • 我们使用了 takeWhile ,它返回一个包含满足给定谓词(在本例中为 i
  • 尽管takewhile返回满足给定谓词的第一个元素,但您可能会认为它会首先评估完整范围,然后传递给forEach
  • 如果我们没有使用 .序列()。我们将范围转换为Sequence ,因此,它被延迟评估。简而言之,它不会处理带有 . takeWhile { ... } 并且只会在 .forEach { 时一一检查。 . . } 处理下一个项目。

首先,我们将对Iterable进行热切评估。这是 Eager 版本,它在继续下一个函数之前评估第一个函数:

科特林

(0..9).takeWhile {
  println{"inside takewhile"}
  it

输出:

Inside takeWhile
Inside takeWhile
Inside takeWhile
Inside takewhile
Inside forEach
Inside forEach
Inside forEach

如您所见,该范围首先使用takewhile处理(返回 0、1、2),然后发送到forEach进行处理。现在,让我们看看惰性版本:

科特林

(0..9).asSequence().takewhile {
  printin ("Inside takewhile")
  it 

输出:

Inside takewhile
Inside forEach
Inside takewhile
Inside forEach
Inside takewhile
Inside forEach
Inside takewhile

正如您在前面的示例中看到的,仅当使用 forEach处理项目时才会评估takewhile 。这是Sequence的本质,它在可能的情况下延迟执行。