حلقه‌ها در لوا

حلقه‌های while، numeric for، generic for و repeat...until در لوا

حلقه چیست؟

حلقه (Loop) به شما اجازه می‌دهد کدی را چند بار تکرار کنید — بدون اینکه چند بار بنویسید. لوا ۴ نوع حلقه دارد.

۱. حلقه while

«تا وقتی شرط درست است، تکرار کن»:

local count = 1

while count <= 5 do
  print("شماره: " .. count)
  count = count + 1   -- فراموش نکنید! وگرنه حلقه بی‌نهایت می‌شود
end
اگر شرط هیچ‌وقت false نشود، حلقه بی‌نهایت می‌شود و برنامه هنگ می‌کند! همیشه مطمئن شوید چیزی شرط را تغییر می‌دهد.

۲. حلقه numeric for

وقتی می‌دانید چند بار می‌خواهید تکرار کنید:

-- از 1 تا 5
for i = 1, 5 do
  print("تکرار: " .. i)
end

-- با گام (step)
for i = 0, 10, 2 do
  print(i)   -- 0, 2, 4, 6, 8, 10
end

-- شمارش معکوس!
for i = 10, 1, -1 do
  print(i)
end
print("پرواز! 🚀")

ساختار کامل

for init, limit, step do
  -- کد
end

-- init: شروع
-- limit: پایان
-- step: گام (پیش‌فرض 1، می‌تواند منفی باشد)

۳. حلقه generic for

برای پیمایش جدول‌ها (آرایه‌ها و دیکشنری‌ها):

-- ipairs: برای آرایه‌ها (ایندکس عددی)
local fruits = {"سیب", "موز", "پرتقال"}

for index, value in ipairs(fruits) do
  print(index, value)
end

-- pairs: برای همه جدول‌ها (حتی دیکشنری)
local person = {name = "علی", age = 25, city = "تهران"}

for key, value in pairs(person) do
  print(key .. " = " .. tostring(value))
end
ipairs از ایندکس ۱ تا اولین nil ادامه می‌دهد (فقط بخش آرایه‌ای). pairs همه کلیدها را پیمایش می‌کند اما ترتیب تضمین‌شده‌ای ندارد!

۴. حلقه repeat...until

مثل while اما شرط آخر بررسی می‌شود — یعنی حداقل یک بار اجرا می‌شود:

local input = ""
local attempts = 0

repeat
  attempts = attempts + 1
  input = "مقدار" .. attempts   -- شبیه‌سازی ورودی
  print("تلاش:", input)
until input == "مقدار۳"

print("پس از " .. attempts .. " تلاش موفق شد")

کدام حلقه را انتخاب کنم؟

حلقهوقتی که...
for i = 1, nتعداد تکرار مشخص است
for ... in ipairs/pairsمی‌خواهید روی جدول پیمایش کنید
whileتا رسیدن به شرطی باید ادامه دهید
repeat...untilحداقل یک بار اجرا باید شود

حلقه‌های تو در تو

-- جدول ضرب
for i = 1, 3 do
  for j = 1, 3 do
    print(string.format("%d × %d = %d", i, j, i * j))
  end
end

مثال: جمع اعداد

local sum = 0
for i = 1, 100 do
  sum = sum + i
end
print("مجموع ۱ تا ۱۰۰: " .. sum)   -- 5050

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط