lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支
发布日期:2021-06-24 17:54:45 浏览次数:2 分类:技术文章

本文共 3017 字,大约阅读时间需要 10 分钟。

2.4.1 条件分支

数学上,分段函数在不同的区间,可以有不同的表达式。这些不同的表达式,可以视为分段函数的分支。

要想在程序中实现这样的一个分段函数,就需要使用分支结构,来实现不同区间对输入的不同计算方式。当然,除了分段函数之外,编程中还有更多地方,也需要在不同的条件下,对输入的参数进行更多不同的处理。这就是分支结构更广泛的用途了。

分支结构,是依据我们在上一节中讲解的“逻辑值”来控制程序执行流程的结构。所有的分支结构都可以被概述为:

“如果条件A成立,那么执行代码X。如果条件A不成立但条件B成立,那么执行代码Y。如果上述条件全都不成立,那么执行 代码Z。最后结束该‘如果’部分。”

如果用图来表示,就是这样:

这样的话,如果 A 成立,那么执行的流程就是“开始 - 代码 X - 后续代码”。

如果 B 成立,流程是“开始 - 代码 Y - 后续代码”。

A 和 B 都不成立,则是“开始 - 代码 Z - 后续代码”。

这样一来,我们就具有了程序运行时刻改变被执行代码的能力。

现在,让我们学习使用标准 Lua 语法来描述这一结构。

2.4.1.1 如果条件成立:if ... then ... end

它代表着“如果条件成立,那么执行语句,然后结束这个‘如果’部分”。这是条件分支结构的基本框架。

我们来看一段示例代码。

程序文本

if 1 < 2 then

print("yes")

end

执行结果

控制台输出:“yes”

2.4.1.2 分析

这段代码的 if 就是开篇加粗部分提到的“如果条件成立”的意思,then 是“那么执行……”,end 则是结束这个“if”的意思。

这个结构的语法十分明晰:if 到 then 之间是待判断的条件(也就是开篇的斜体“条件 A”),then 到 end 中间是受这个结构控制决定要不要执行的代码(斜体“代码 X”)。

实际上呢,通过上一节的学习,我们就知道了,其实条件的本质是个逻辑值。如果这个逻辑值是 true,那么就执行 then 到 end 之间的代码,否则不执行,直接跳到 end 后边去。

试一试 将示例代码中的条件 1 < 2 改为等效的 true 试试?

执行结果不变。

图示:

试一试 把示例代码中的条件 1 < 2 改为 1 > 2 或者直接改为 false 或 nil 试试?

控制台什么都不会输出,then 到 end 之间的代码因条件为假而未能执行。

2.4.1.3 如果另一条件成立:elseif ... then

它是在第一个条件不成立时,作为补充使用。可以当作“否则如果另一个条件成立”来解释。

程序文本

a = 2

if a < 1 then

print("Impossible!")

elseif a < 3 then

print("That's OK...")

end

执行结果

控制台输出:“That's OK...”

2.4.1.4 分析

if 首先想要判断的条件成立时执行的代码块,并不一定在 end 处结束。elseif 和 else 也可用作这一部分的结束。

因此我们知道,本示例中的第一个 then 到 elseif 就是开篇提到的斜体“代码X”,而 elseif 到第二个 then 是斜体“条件 B”,这个 then 到 end 为止是“代码 Y”。

那么我们来看这段代码。

它先声明了一个变量 a,令其值为 2。

然后计算 a 是否小于 1。因为 2 不小于 1,所以计算结果为 false,进而导致从 if 到 elseif 之间的部分“print("Impossible!")”未能执行。

这时我们知道,a < 1 这个条件已经不满足,那么就是时候判断 elseif 到第二个 then 之间的条件是否成立了。2 当然小于 3,因此得到一个 true,这个 then 到 end 之间的代码得以执行。

这种结构的图示如下:

了解了这个结构的语法之后,我们还需要补充一点,就是一个 if ... end 中,可以包含无数个 elseif ... then。执行时先判断最初 if 到第一个 then 之间的条件,如果不满足,判断从上至下第一个 elseif 的条件,如果不满足则继续向下……找到第一个满足的之后,就执行它到下一个 elseif 或者 end 中间的代码,然后执行整个结构以外的后续代码。

为了理解这里,我们可以实际操作试试。

试一试 在示例代码的 elseif a < 3 then 前面加上:

elseif a < 2.5 then

print("Malachite is so cute!")

观察执行结果是否改变。

我们会发现,输出结果变成了:

我真可爱,嘻嘻。(划掉

我们会发现,其实 a < 3 这个条件是满足的。但是因为 a < 2.5 的 elseif 比 a < 3 靠前,因此这段程序中 a < 2.5 对应的代码先执行了,而 a < 3 就被冷落了……好像有什么奇怪的东西混进来了(bushi

2.4.1.5 以上条件均不成立:else

有些时候,当所有我们预设的条件都不满足时,我们也不想直接去执行后续代码,而是想要设计一个默认的处理方式。这时,我们就会用到 else。

程序文本

a = 2

if a < 1 then

print("Who cares?")

else

print("yes")

end

执行结果

控制台输出:“yes”

2.4.1.6 分析

我们可以将 else 理解成“如果以上的条件全都不成立,那么执行以下代码”的意思。

以上代码的含义:

由于 2 并不小于 1,因此 if 的条件不成立,第一个 then 到 else 为止的“print("Who cares?")”都没有被执行。

但恰好因为这个条件没成立,分支结构就切换到执行 else 到 end 为止的代码部分“print("yes")”。于是,“yes”就被显示到屏幕上了。

本例用图可以表示为:

从这些地方我们能够看出,一个 else 是总结性的。因此,它也可以处理 elseif 没成立时的情况。

试一试 尝试在示例程序的 else 前面加一个

elseif a < 3 then

print("TEST PASS!")

执行程序,观察其输出。

我们可以看到,输出结果变成了这样:

这说明,只要有任何一个 elseif 成立,程序都不会执行到 else 上去。

试一试 将上一个“试一试”中的条件改成一个不成立的条件,比如 false

我们可以看到,输出又变回了“yes”。

这印证了我们的观点:如果所有条件都不成立,那么执行 else,进行缺省操作。

试一试 在一个 else 到 end 之间放置一个 elseif ... then,并尝试设定脚本。

结果:

很明显这是报错了。这意味着,在编排顺序时,else 也是要放在“总结性的”位置——if 以及 所有 elseif 之后。它只能在 end 之前。

试一试 写一段代码,其中的一个 if 中包含了两个 else。

看都不用看我们就知道一定又是错的,因为我们不可能对同一种情形声明两种不同的处理。报错信息如下:

本节内容就到这里。理解条件分支,是编程中的一个难题。希望大家多花时间在重复本节内容中,争取把所有示例代码都自己实现一遍。

转载地址:https://blog.csdn.net/weixin_34237125/article/details/113585441 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql同时多表插入_MySQL多表同时插入
下一篇:linux终端安装mingw编译器_C/C++编译器MinGW的安装与配置

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月19日 03时19分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章