API Basic For uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

For / To / Step / Next / Exit For

ClassicUO • Basic

For повторює блок у числовому діапазоні, включно з досяжною межею. Підходить для індексів масиву або визначеної кількості дій; For Each перебирає значення елементів.

Точний синтаксис

For [VAR] counter = start To limit [Step increment]
    statements
Next [counter]
Continue For
Exit For
Break

Параметри

  • counter / VAR — Числова змінна лічильника. VAR оголошує її у процедурі; без VAR використовується доступна змінна. З Option Explicit On оголосіть її заздалегідь або вживайте For Var. Тип задавайте окремо: DIM counter AS Integer; AS у заголовку числового For не підтримується.
  • start — Початковий числовий вираз: обчислюється один раз і присвоюється до обчислення limit та increment.
  • limit — Включена кінцева межа, що обчислюється один раз при вході. Додатний крок перевіряє counter <= limit, від’ємний — counter >= limit.
  • increment — Необов’язковий числовий крок, стандартно 1. Може бути від’ємним чи дробовим; нуль спричиняє перехоплювану помилку. Тип лічильника має підтримувати крок і просування.
  • statements / Next / exit — Тіло й Next пишуться окремими рядками. Ім’я після Next необов’язкове, але повинно збігатися з лічильником. Continue For переходить до наступного кроку, Exit For виходить з найближчого For/For Each, Break — з найближчого циклу будь-якого виду.

Повертає

For, Next та Exit For нічого не повертають. Лічильник — число, а не автоматично ID предмета. Після звичайного завершення рушій зберігає останнє використане значення, а не значення за межею. Пропущений цикл залишає start, ранній вихід — поточне значення. Приклади повертають з Main Integer 12, 28, 395.

Поведінка

  • Вхід: присвоїти start, зберегти limit і крок, відхилити нульовий крок, перевірити перше значення. Напрямок від межі пропускає тіло; start=limit виконує його один раз.
  • Next перевіряє counter+step і присвоює лише значення для допустимої наступної ітерації: 1 To 5 Step 3 відвідує 1 та 4. Зміни змінних межі/кроку не змінюють збережених значень; зміна самого лічильника впливає на наступний крок.
  • Структура й ім’я Next перевіряються до виконання; помилка структури — SC020. Вкладені цикли потребують різних лічильників. Вихід із Try виконує Finally. Пауза й зупинка доступні, автоматичної затримки або таймауту немає.

Приклади

1. Сума комірок

# values[2] створює індекси 0,1,2 зі значеннями 2,4,6. Sum отримує масив ByVal, починає index=0 та зберігає length-1=2. Стандартний крок 1 відвідує три комірки; total=12 повертається до Main.
Option Explicit On
Function Sum(ByVal items)
    Var total = 0
    For Var index = 0 To GetArrayLength(items) - 1
        total += items[index]
    Next index
    Return total
End Function
Sub Main()
    Dim values[2]
    values[0] = 2
    values[1] = 4
    values[2] = 6
    Return Sum(values)
End Sub

Пояснення параметрів і виконання:

values[2] створює індекси 0,1,2 зі значеннями 2,4,6. Sum отримує масив ByVal, починає index=0 та зберігає length-1=2. Стандартний крок 1 відвідує три комірки; total=12 повертається до Main.

2. Видалення з кінця

# items містить -1,3,-2,5. Початок Count()-1=3, межа 0, крок -1. Видалення від’ємного елемента зсуває лише вже переглянуті індекси, не пропускаючи наступних елементів. Залишаються 3 та 5; Count()*10+3+5 повертає 28.
Option Explicit On
Sub Main()
    Var items = List()
    items.Add(-1)
    items.Add(3)
    items.Add(-2)
    items.Add(5)
    For Var index = items.Count() - 1 To 0 Step -1
        If items[index] < 0 Then
            items.RemoveAt(index)
        End If
    Next index
    Return items.Count() * 10 + items[0] + items[1]
End Sub

Пояснення параметрів і виконання:

items містить -1,3,-2,5. Початок Count()-1=3, межа 0, крок -1. Видалення від’ємного елемента зсуває лише вже переглянуті індекси, не пропускаючи наступних елементів. Залишаються 3 та 5; Count()*10+3+5 повертає 28.

3. Збережені межі й лічильник

# ReadLimit збільшує calls через ByRef і повертає value. Початок 1, межа 5, крок 2 обчислюються по одному разу: calls=3. Присвоєння upper=99, stride=1 у тілі не змінюють цей цикл. Значення 1,3,5 дають total=9, index залишається 5. Main повертає 300+90+5=395.
Option Explicit On
Function ReadLimit(ByRef calls, ByVal value)
    calls += 1
    Return value
End Function
Sub Main()
    Var calls = 0
    Var upper = 5
    Var stride = 2
    Var total = 0
    For Var index = ReadLimit(calls, 1) To ReadLimit(calls, upper) Step ReadLimit(calls, stride)
        total += index
        upper = 99
        stride = 1
    Next index
    Return calls * 100 + total * 10 + index
End Sub

Пояснення параметрів і виконання:

ReadLimit збільшує calls через ByRef і повертає value. Початок 1, межа 5, крок 2 обчислюються по одному разу: calls=3. Присвоєння upper=99, stride=1 у тілі не змінюють цей цикл. Значення 1,3,5 дають total=9, index залишається 5. Main повертає 300+90+5=395.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic