- 0X26 条件表达式
- 大多数编程语言都拥有三种流程控制结构.
- 一种是顺序结构,也就是多个语句顺序执行.一般来说这种结构不需要特别的语法.(但是Lua还是提供了do-end结构来表示.)
- 一种是选择结构.在Lua中体现为if语句.
- 另一种是循环结构.在Lua中就是我们接下来要介绍和while语句,repeat语句和以后要介绍的for语句.
- 一般认为,有这三种流程控制结构的语言是图灵完备的.关于这个有很多严谨的数学证明,就不在本教程中展开了.
- 一个很直观的,循环语句的作用就是可以重复执行一段代码(代码块).假设已经有"i=0".
print(i) i=i+1
while (i<10) do prrint(i) i=i+1 end
- 在3中的循环语句称为while语句.它由三个关键字(while,do,end),一个逻辑表达式和一个循环体组成.
- 循环体类似于选择结构中的一个分支.它在do和end之间.当满足一定条件的时候,重复执行循环体中的代码.
- while后,do之间的表达式的返回值决定是否继续循环.如果表达式的值为true(或者在Lua逻辑运算中等价于true),则执行一次循环体,然后再次判断是否满足循环条件.
- 在3的例子中,前10次循环i分别是从0到9,(i<10)都为true.第11次,i等于10,(i<10)为false.所以循环终止,跳到与while对应的end之后继续执行.
- while每次都是先检测条件是否成立,然后再执行循环体或者终止循环.Lua的另一种循环语句repeat则是每次先执行循环体,然后判断条件是否成立.如果成立则进入下一次循环.否则结束循环.例如(还是假设已经有"i=0"):
repeat print(i) i=i+1 until (i>=10)
- 在5的例子中,repeat循环语句的结果和3中的while语句一样.
- 虽然用的关键词不一样了.但是repeat语句一样有循环体和条件.
- repeat和until之间是要重复执行的循环体.
- until之后的表达式是循环终止条件.
- 注意,repeat和while的几点不同:
- while语句的条件表达式为true时循环才会继续.repeat的条件表达式为true时循环终止.
- while先判断条件才决定是执行循环体还是终止循环.repeat先执行循环体才决定是否终止循环.
- while语句对应中文中的"当型循环",repeat语句对应中文中的"直到型循环"
- repeat循环不需要end关键字.条件表达式也可以写在until的后一行.
- 两种循环语句虽然有所不同,但是一般来说二者可以相互转换.只是有的问题用while写更简洁,有的用repeat更简洁.
- 演示: 两种循环 https://www.bilibili.com/video/av16713723/
- 一个循环语句可以在另一个循环语句的循环体里.这称为循环语句的嵌套.不光循环语句之间可以嵌套.循环语句,if语句,do-end语句,函数定义等Lua中的复合句都可以相互嵌套.来实现更复杂的效果.
- 0X29 再谈循环