API Basic Do it - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Do / Loop / While / Until / Repeat
ClassicUO • Basic
Do controlla prima o dopo il corpo. While ripete se vero; Until fino al vero. Repeat … Until è la forma storica supportata con controllo finale.
Sintassi esatta
Do While condition
statements
Loop
Do Until condition
statements
Loop
Do
statements
Loop While condition
Do
statements
Loop Until condition
Do
statements
Loop
Repeat
statements
Until condition
Continue Do
Exit Do
Break
Parametri
condition / While / Until— Espressione Boolean numerica 0/False o 1/True. While continua se vera, Until esce se vera. Rivalutata a ogni controllo; il testo non è convertito in Boolean.position / Repeat— Dopo Do la condizione può evitare il primo passaggio. Dopo Loop o Until di Repeat avviene almeno un passaggio. È ammessa una sola posizione della condizione. Do … Loop senza condizione richiede un’uscita esplicita.statements / exit— Corpo. Continue Do raggiunge il prossimo controllo; Exit Do esce dal Do o Repeat più vicino. Break esce dal ciclo più interno di qualsiasi tipo. RETURN termina tutta la procedura/funzione.
Restituisce
Do, Loop, Repeat, Until ed Exit Do non restituiscono valori. Gli esempi restituiscono esplicitamente Integer 1,33,83 da Main: contatori combinati, non risultati Boolean di comandi.
Comportamento
- La preparazione associa i blocchi e verifica i trasferimenti. Condizioni a entrambe le estremità dello stesso Do producono SC020. Il motore verifica nella posizione scelta e ripete secondo While/Until.
- Continue Do verifica comunque la condizione finale, se presente; con condizione iniziale ritorna all’intestazione. I Finally abbandonati vengono eseguiti esattamente una volta prima del trasferimento.
- Repeat esegue prima: verifica gli array vuoti prima dell’ingresso. Nessun timeout implicito. Per attendere il gioco usa Wait e una scadenza; pausa/arresto rimangono attivi.
Esempi
1. Prima o dopo
# ready=True soddisfa già Until. Do Until ready esegue zero passaggi: before=0. Il secondo ciclo controlla dopo l’incremento, quindi after=1. Main restituisce before*10+after=1.
Option Explicit On
Sub Main()
Var ready = True
Var before = 0
Var after = 0
Do Until ready
before += 1
Loop
Do
after += 1
Loop Until ready
Return before * 10 + after
End Sub
Spiegazione dei parametri e dell’esecuzione:
ready=True soddisfa già Until. Do Until ready esegue zero passaggi: before=0. Il secondo ciclo controlla dopo l’incremento, quindi after=1. Main restituisce before*10+after=1.
2. Tentativi limitati con pulizia
# attempts parte da 0 e aumenta a ogni passaggio. I primi due Continue Do eseguono Finally e il controllo attempts<4. Al terzo tentativo anche Exit Do esegue Finally. attempts=3, cleanup=3 danno 33. È una simulazione locale, non tentativi di rete reali.
Option Explicit On
Sub Main()
Var attempts = 0
Var cleanup = 0
Do
Try
attempts += 1
If attempts < 3 Then
Continue Do
End If
Exit Do
Finally
cleanup += 1
End Try
Loop While attempts < 4
Return attempts * 10 + cleanup
End Sub
Spiegazione dei parametri e dell’esecuzione:
attempts parte da 0 e aumenta a ogni passaggio. I primi due Continue Do eseguono Finally e il controllo attempts<4. Al terzo tentativo anche Exit Do esegue Finally. attempts=3, cleanup=3 danno 33. È una simulazione locale, non tentativi di rete reali.
3. Ciclo storico con sentinella
# values=[3,5,0] non è vuoto. Repeat legge, incrementa index e somma. Until termina a zero o al limite dell’array; OrElse salta il secondo controllo quando trova zero. total=8 e index=3 producono 83.
Option Explicit On
Sub Main()
Dim values[2]
values[0] = 3
values[1] = 5
values[2] = 0
Var index = 0
Var value = 0
Var total = 0
Repeat
value = values[index]
index += 1
total += value
Until (value = 0) OrElse (index >= GetArrayLength(values))
Return total * 10 + index
End Sub
Spiegazione dei parametri e dell’esecuzione:
values=[3,5,0] non è vuoto. Repeat legge, incrementa index e somma. Until termina a zero o al limite dell’array; OrElse salta il secondo controllo quando trova zero. total=8 e index=3 producono 83.