ZetCode

Julia 控制流

最后修改时间:2023 年 10 月 20 日

本文讨论 Julia 中的控制流。

当 Julia 程序运行时,代码是从上到下执行的。程序的流程可以通过各种关键字来改变,包括 if/elseif/else、while 和 for。

if 条件

if 关键字用于检查一个表达式是否为真。如果为真,则执行一个语句。该语句可以是一个单独的语句,也可以是一个复合语句。复合语句由用代码块括起来的多个语句组成。代码块是用花括号括起来的代码。

main.jl
r = rand(-5:5)
println(r)

if r > 0
    println("The r variable is positive")
end

生成一个随机数。如果该数字大于零,我们向终端打印一条消息。

r = rand(-5:5)

rand 函数生成一个介于 -5 到 5 之间的随机整数。

if r > 0
  println("The r variable is positive")
end

使用 if 关键字,我们检查生成的数字是否大于零。if 关键字后面是一个求值为布尔值的表达式。如果布尔值为真,则执行代码块。在我们的例子中,字符串r 变量为正被打印到终端。如果随机值为负,则什么也不做。代码块以 end 关键字终止。

$ julia simple.jl
-4
$ julia simple.jl
1
The r variable is positive
$ julia simple.jl
4
The r variable is positive

else 条件

我们可以使用 else 关键字来创建一个简单的分支。如果 if 关键字后面的表达式求值为 false,则自动执行 else 关键字后面的代码块。

main.jl
r = rand(-5:5)

println(r)

if r > 0
    println("The n variable is positive")
else
    print("The r variable is negative or zero")
end

执行 if 关键字后面的代码块或执行 else 关键字后面的代码块。

elseif 条件

我们可以使用 elseif 创建多个分支。它仅在前一个条件未满足时测试另一个条件。

请注意,我们可以在测试中使用多个 elseif 关键字。

main.jl
r = rand(-5:5)

println(r)

if r > 0
    println("The r is positive")
elseif r == 0
    println("The r is zero")
else
    println("The r is negative")
end

如果第一个条件求值为真,例如随机值大于零,则执行第一个代码块,并跳过其余两个代码块。如果第一个条件不满足,则检查 elseif 关键字后面的第二个条件。如果第二个条件求值为真,则执行第二个代码块。如果不满足,则执行 else 关键字后面的第三个代码块。如果之前的条件未满足,则始终执行 else 代码块。

$ julia main.jl
4
The r is positive
$ julia main.jl
5
The r is positive
$ julia main.jl
0
The r is zero
$ julia main.jl
-1
The r is negative

while 循环

while 关键字用于创建循环。while 循环内的语句一直执行,直到表达式求值为 false。

main.jl
vals = [22, 34, 12, 32, 4]

let i = length(vals)

    mysum = 0

    while i != 1

        i -= 1
        mysum = mysum + vals[i]
    end

    println("The sum is: ", mysum)
end

我们要计算 vals 数组中所有值的总和。我们使用 while 循环。我们使用 length 函数确定列表的长度。while 循环一遍又一遍地执行,直到 i 等于一。在循环体中,我们递减计数器并计算值的总和。

$ julia whilestm.jl
The sum is: 100

break 关键字

break 关键字用于在需要时中断循环。

main.jl
while true

    r = rand(1:30)
    print("$r ")

    if r == 22
        break
    end
end

println()

在我们的示例中,我们打印随机整数。如果数字等于 22,则使用 break 关键字中断循环。while true 创建一个无限循环。break 用于跳出这个无限循环。

$ julia breakstm.jl
15 7 24 27 7 22

continue 关键字

continue 语句用于中断当前循环而不跳出整个循环。它启动一个新的循环。

main.jl
let num = 0

    while num < 1000

        num = num + 1

        if num % 2 == 0
            continue
        end

        print("$num ")
    end
end

println()

在示例中,我们打印所有小于 1000 且不能被 2 整除的数字。

if num % 2 == 0
    continue
end

当数字可以被 2 整除时,我们调用 continue,循环中断并开始一个新的循环。因此,该数字不会被打印。

for 循环

for/in 关键字用于迭代序列。序列可以是集合、字符串或范围。

main.jl
words = ["sky", "summer", "winter", "war", "rock"]

for word in words
    println(word)
end

println("---------------------------------")

for word = words
    println(word)
end

println("---------------------------------")

word = "falcon"

for e in word
    println(e)
end

println("---------------------------------")

for e in range(1,5)
    println(e)
end

该程序使用 for 循环迭代序列。

words = ["sky", "summer", "winter", "war", "rock"]

我们定义一个单词数组。

for word in words
    println(word)
end

我们使用 for/in 逐个遍历数组元素,并将每个元素打印到控制台。

for word = words
    println(word)
end

Julia 还有一个替代语法:for/=

word = "falcon"

for e in word
    println(e)
end

这里我们迭代字符串字符。

for e in range(1,5)
    println(e)
end

我们迭代由 range 创建的值范围。

$ julia main.jl
sky
summer
winter
war
rock
---------------------------------
sky
summer
winter
war
rock
---------------------------------
f
a
l
c
o
n
---------------------------------
1
2
3
4
5

来源

Julia 控制流文档

在本文中,我们学习了 Julia 中的程序控制流。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出所有 Julia 教程