====== Lua loops ====== Loops in Lua allow you to execute a block of code repeatedly until a certain condition is met. They are indispensable tools for performing iterative tasks such as iterating over arrays, processing data, and controlling game logic. In lua, there are 3 main types of loops: - ** While ** loop - ** Repeat-Until** loop - ** For ** loop ===== While loop ===== The while loop in Lua executes a block of code as long as a specified condition is true. Example: -- Basic while loop local count = 0 while count < 5 do --While count is less than 5 then print("Count:", count) count = count + 1 end ===== Repeat-Until ===== The repeat-until loop is similar to the while loop, but it executes the block of code at least once before checking the condition. Example: -- Basic repeat-until loop local num = 1 repeat print("Number:", num) num = num + 1 until num > 5 ===== For loop ===== The for loop in Lua is typically used for iterating over a range of values or elements in a collection. It consists of an initialization, a condition, and an optional step (value added to the initialization each iteration), there are two types of **for** loops, a **numeric** one, and a **generic** one ==== Numeric for ==== The numeric for loop is used to iterate over a range of numeric values. It has three parts: the loop variable initialization, the condition, and the step. The loop variable is initialized to the starting value, and the loop continues as long as the loop variable does not meet the condition. After each iteration, the loop variable is incremented by the step value. If no step value is specified, it will be 1 -- Numeric for loop iterating from 1 to 5 for i = 1, 5 do print("Iteration", i) end -- Numeric for loop with a step for i = 1, 10, 2 do print("Iteration", i) end In the first example, the loop iterates from 1 to 5, incrementing i by 1 in each iteration. In the second example, the loop iterates from 1 to 10 with a step of 2, meaning i is incremented by 2 in each iteration. ==== Generic for ==== The generic for loop is used to iterate over the elements of a table. It iterates over each key-value pair, or index-value pair in the table. Example: -- Generic for loop iterating over values in a table using ipairs local fruits = {"apple", "banana", "orange"} for index, value in ipairs(fruits) do print("Fruit:" .. value) print("Current index: ".. index) end -- Generic for loop iterating over key-value pairs in a table using pairs local player = {name = "Alice", score = 100} for key, value in pairs(player) do print(key .. ":" .. value) end In the first example, ipairs is used to iterate over the values of a table with sequential numeric indices the loop iterates over each element of the fruits table, storing the value in the fruit variable and also giving us the index In the second example, pairs is used to iterate over all key-value pairs in the player table, including non-numeric keys. Each iteration assigns the key to the key variable and the corresponding value to the value variable. ===== Loop control statements ===== Lua provides loop control statements such as break and a way to implement the continue to alter the flow of loop execution. * **break**: Terminates the loop prematurely. * **pseudo-continue**: Skips the current iteration and continues with the next iteration. ==== Break ==== -- Using break statement for i = 1, 10 do if i == 5 then break end print("Iteration", i) end This code will exit the loop when the iteration is equal to five, so it will only print until 4, and will stop at 5 ==== Pseudo-Continue ==== Lua by default, does not provide support for a **continue** statement, but we can make a kind of workaround, with a statement called **goto** this way for i = 1, 5 do if i == 3 then goto continue end print("Iteration", i) ::continue:: end However, try to use goto with caution, as it can cause something called as [[wp>Spaghetti_code|Spaghetti code]], which is more difficult to maintain and read