Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 3.17 KB

0X28循环语句.md

File metadata and controls

52 lines (46 loc) · 3.17 KB

0X28 循环语句

前置知识

  • 0X26 条件表达式

正文

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

后续推荐

  • 0X29 再谈循环