BreakingExpress

Lua loops: methods to use whereas and repeat till

Control constructions are an vital function of programming languages as a result of they permit you to direct the circulate of this system based mostly on circumstances which are usually established dynamically as this system is operating. Different languages present totally different controls, and in Lua there’s the whereas loop, for loop, and repeat till loop. This article covers the whereas and repeat till loops. Because of their flexibility, I cowl for loops in a separate article.

A situation is outlined by an expression utilizing an operator, which is a flowery time period for symbols you might acknowledge from math lessons. Valid operators in Lua are:

Those are often known as relational operators as a result of they immediate an investigation of how two values relate to at least one one other. There are additionally logical operators, which imply the identical as they imply in English and will be integrated into circumstances to additional describe the state you wish to test for:

Here are some instance circumstances:

  • foo > 3: Is the variable foo is bigger than 3? The foo should be 4 or extra to fulfill this situation.

  • foo >= 3: Is foo better than or equal to three? The foo should be 3 or extra to fulfill this situation.

  • foo > 3 and bar < 1: Is foo better than 3 whereas bar is lower than 1? For this situation to be true, the foo variable should be 4 or extra on the identical second that bar is 0.

  • foo > 3 or bar < 1: Is foo better than 3? Alternately, is bar lower than 1? If foo is 4 or extra, or bar is 0, then this situation is true. What occurs if foo is 4 or extra whereas bar is 0? The reply seems later on this article.

While loop

Some time loop executes directions for so long as some situation is happy. For instance, suppose you are growing an utility to observe an ongoing zombie apocalypse. When there aren’t any zombies remaining, then there isn’t any extra zombie apocalypse:

zombie = 1024

whereas (zombie > 0) do
  print(zombie)
  zombie = zombie-1
finish

if zombie == 0 then
  print("No more zombie apocalypse!")
finish

Run the code to look at the zombies vanish:

$ lua ./whereas.lua
1024
1023
[...]
3
2
1
No extra zombie apocalypse!

Until loop

Lua additionally has a repeat till loop assemble that is basically some time loop with a “catch” assertion. Suppose you have taken up gardening and also you wish to observe what’s left to reap:

mytable = { "tomato", "lettuce", "brains" }
bc = 3

repeat
   print(mytable[bc])
   bc = bc - 1
till( bc == 0 )

Run the code:

$ lua ./till.lua
brains
lettuce
tomato

That’s useful!

Infinite loops

An infinite loop has a situation that may by no means be happy, so it runs infinitely. This is usually a bug attributable to dangerous logic or an surprising state in your program. For occasion, initially of this text, I posed a logic puzzle. If a loop is about to run till foo > 3 or bar < 1, then what occurs when foo is 4 or extra whereas bar is 0?

Here’s the code to resolve this puzzle, with a security catch utilizing the break assertion simply in case:

foo = 9
bar = 0

whereas ( foo > 3 or bar < 1 ) do
  print(foo)
  foo = foo-1

  -- security catch
  if foo < -800000 then
    break
  finish
finish

Programming and improvement

You can safely run this code, nevertheless it does mimic an unintentional infinite loop. The flawed logic is the or operator, which allows this loop to proceed each when foo is bigger than 3 and when bar is lower than 1. The and operator has a special impact, however I depart that to you to discover.

Infinite loops truly do have their makes use of. Graphical functions use what are technically infinite loops to maintain the appliance window open. There’s no approach of figuring out how lengthy your consumer intends to make use of the appliance, so this system runs infinitely till the consumer selects Quit. The easy situation utilized in these instances is one that’s clearly all the time happy. Here’s an instance infinite loop, once more with a security catch in-built for comfort:

n = 0

whereas true do
  print(n)
  n = n+1

  if n > 100 then
  break
  finish
finish

The situation whereas true is all the time happy as a result of true is all the time true. It’s the terse approach of writing whereas 1 == 1 or one thing equally eternally true.

Loops in Lua

As you’ll be able to inform from the pattern code, though there are totally different implementations, loops all mainly work towards the identical purpose. Choose the one which is smart to you and that works finest with the processing you might want to carry out. And simply in case you want it: The keyboard shortcut to terminate a runaway loop is Ctrl+C.

Exit mobile version