Lua 的控制结构:条件语句,循环

发布时间 2023-06-27 17:03:03作者: 古明地盆

楔子

上一篇文章,我们介绍了 Lua 的整数、浮点数、布尔值、字符串,其它的数据结构后续介绍,本次先来看看 Lua 中的控制结构。

条件语句

我们来看看 Lua 中的条件语句怎么写,语法和其它编程语言类似,单独的 if,if 和 else,if...elseif...elseif...else。

-- 单独的 if
if condition then
    statement
end

-- if 和 else
if condition then
    statement
else
    statement
end

-- if..elseif...else
-- 注意:是 elseif,不是 else if,else 和 if 之间需要连起来
-- 可以写多个 elseif,但是只能有至多一个 if 和一个 else
if condition then
    statement
elseif condition then
    statement
elseif condition then
    statement
else
    statement
end    

if 和 elseif 后面必须加上一个 then,类似于 Python 中必须加上一个冒号一样,但是 else 则不需要 then。另外每个 if 语句,在结尾处必须有一个 end,来标志这个 if 语句块的结束。既然结尾处有 end,那么 Lua 中也就不需要缩进了。但 Python 必须严格按照缩进来,而 Lua 则不被缩进约束,但为了代码的可读性还是建议按照 Python 的规范来编写。

a = 85

if a > 80 then
    print("a > 80")
end
-- a > 80

if a > 85 then
    print("a > 85")
else
    print("a <= 85")
end
-- a <= 85

if a < 60 then
    print("不及格")
elseif a < 85 then
    print("及格")
elseif a < 100 then
    print("优秀")
elseif a == 100 then
    print("满分")
else
    print("无效的分数")
end
-- 优秀

我们说,Lua 的 if 语句不受缩进影响,那么有时候单个 if 我们也可以写在一行。

a = 85

-- 这么写也是可以的
if a > 80 then print("a > 80") end

-- if 和 else也可以写在一行
if a > 85 then print("a > 85") else print("a <= 85") end

-- 甚至 if elseif else 也可以写在一行,或者自由换行也是可以的
if a < 60 then 
    print("不及格") elseif a 
< 85 then print("及格") elseif 
a <= 100 then print("优秀") else 
print("无效的分数") end

对于 if elseif else,最好不要像上面那么写,尽管它是支持的,但是不要这么做。由此我们看到,Lua 不是靠缩进来规范语句的,而是靠关键字。

嵌套 if 也是类似的:

age = 18
gender = "female"

if gender == "female" then
    if age >= 18 then
        print("亭亭玉立的大姑娘")
    else
        print("可爱的小女孩")
    end 

else
    if age >= 18 then
        print("英俊挺拔的小伙子")
    else
        print("调皮的小男孩")
    end
end
-- 亭亭玉立的大姑娘

上面的嵌套 if 是标准写法,但我们说 Lua 的 if 不受缩进的约束。

age = 18
gender = "female"

if gender == "female" then
    if age >= 18 then
print("亭亭玉立的大姑娘")
    else print("可爱的小女孩")
    end  else
    if age >= 18 then
print("英俊挺拔的小伙子") else
        print("调皮的小男孩")
end end
-- 亭亭玉立的大姑娘

所以我们不考虑缩进也是可以的,但是不要这么写,可读性太差了,一定要按照规范来写。如果是 Python 的话,要是这样不管缩进,直接就报错了。

while 循环

Lua 提供了标准的 while 循环,格式如下。

while condition do
    statement
end  

举个例子:

i =
1 sum = 0

while i < 10 do
    sum = sum + i
    i = i + 1
end

print(string.format("sum = %d", sum))  -- sum = 45

这个比较简单,没什么可说的。

repeat ... until

repeat ... until 说白点,就是一直重复做,直到满足某个条件停下来。

i =
1 sum = 0

-- 不断的执行 sum = sum + 1   i = i + 1,直到满足 i >= 10的时候停下来
repeat
    sum = sum + i
    i = i + 1
until i >= 10

print(string.format("sum = %d", sum))  -- sum = 45

这里忘记提了,我们这里的条件只有一个,如果是多个条件呢?和 Python一样,使用 and、or 进行连接。

for 循环

for 循环分为两种,我们来看一下。

for a = 1, 8 do
    print(a)
end
--[[
1
2
3
4
5
6
7
8
]]


-- 我们看到循环打印了 1 到 8
-- 当然还可以跟上步长
for a = 1, 8, 3 do
    print(a)
end
--[[
1
4
7
]]

上面是简单的遍历数字,for 循环还可以遍历表,等介绍表的时候我们再说。

然后是 break 关键字,它负责跳出循环体,可以用于for、while、repeat,注意:没有 continue。

for a = 1, 8 do
    print(a)
    break
end
-- 1

-- Lua 中没有 continue,但我们可以是 if else 进行模拟
-- 比如,如果 a 是偶数,那么我们就继续下一层循环
for a = 1, 8 do
    if a % 2 == 0 then
      -- 分支代码可以为空
    else print(a) end
end
--[[
1
3
5
7
]]

以上就是 Lua 中的条件语句和循环,比较简单。