API Basic Enum it - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Enum / End Enum

ClassicUO • Basic

Enum raggruppa costanti Integer con nomi per gli stati dello script. Dichiararlo nel file o in Module, fuori da Sub/Function. È un sottoinsieme di VB.NET, senza creare oggetti .NET Enum.

Sintassi esatta

[Public | Private] Enum name [As Integer]
    member [= constantExpression]
    ...
End Enum
Dim state As name = name.member
ModuleName.name.member

Parametri

  • Public / Private — Public è predefinito, anche in Module. Private è consentito solo in Module e nasconde tipo e membri agli altri moduli e al file.
  • name — Nome semplice senza punti, come Mode; maiuscole e minuscole equivalenti. UO e tipi incorporati sono riservati. Il nome completo non può duplicare Enum, Module o variabili globali.
  • As Integer — Facoltativo; solo Integer con segno a 32 bit, -2147483648..2147483647. Altri tipi base sono rifiutati. As Mode per variabile, parametro o risultato Function usa memoria e conversione Integer; non limita i valori ai membri elencati. Senza inizializzazione vale 0.
  • member — Un nome semplice per riga, almeno un membro. Duplicati, True e False vietati. Senza espressione si parte da 0, poi si aggiunge 1 al valore precedente. Nomi diversi possono avere lo stesso valore.
  • constantExpression — Espressione costante facoltativa: interi decimali/0x, parentesi, meno unario, + - * / Mod, membri precedenti e Const numeriche già dichiarate. Risultato finale intero nell’intervallo; divisioni intermedie anche frazionarie. Una Const usata deve produrre Integer, senza tipo o As Integer/Long/Short/Byte. Niente chiamate, variabili, String, confronti o letture di array. Riferimenti futuri, cicli e dipendenze oltre 128 livelli sono rifiutati.
  • name.member — Leggere Mode.Ready o, fuori dal modulo, Tools.Mode.Ready. Dentro Tools basta Mode.Ready; With Mode consente .Ready. Assegnazioni, += e scrittura di ritorno ByRef non possono modificare costanti. Enum non è una funzione.

Restituisce

La dichiarazione non restituisce valori e non richiede parentesi di chiamata. Un membro restituisce Integer, ad esempio Mode.Working = 3: è uno stato, non un successo automatico. Il confronto state = Mode.Finished restituisce 1/True o 0/False, utilizzabili in entrambe le forme. Lo stato 0 può significare Idle, non errore.

Comportamento

  • EnumCatalog prepara i valori precedenti senza eseguire script/API, assegna quelli automatici e verifica nomi, accesso e limiti. SC026 blocca l’avvio anche senza Option Explicit. Anche gli errori sintattici bloccano; il testo incompleto nell’editor produce diagnosi.
  • DefinitionCollector inserisce i membri costanti prima degli inizializzatori globali e dei valori Optional: questi possono usare Enum dichiarati più avanti. Dentro Enum servono sempre costanti precedenti. Il catalogo resta nello script preparato e viene sostituito caricando un altro script.
  • ScriptBindings risolve una volta nomi di modulo e Private. L’esecuzione legge costanti senza ricalcoli nei cicli o reflection. As Mode diventa Integer, che può apparire nel debugger. Include può fornire la dichiarazione. Nessun attributo Flags, metodo System.Enum, importazione implicita o elenco automatico dei membri.

Esempi

1. Dare nomi agli stati

# Idle=0 e Queued=1 sono automatici. Working=10 cambia la sequenza, Finished=11. state As TaskState riceve 10. Main restituisce String "0:1:10:11"; CStr converte i numeri. Adattare i nomi al proprio script; la dichiarazione non avvia procedure.
Option Explicit On
Enum TaskState As Integer
    Idle
    Queued
    Working = 10
    Finished
End Enum

Sub Main()
    Dim state As TaskState = TaskState.Working
    Return CStr(TaskState.Idle) & ":" & CStr(TaskState.Queued) & ":" & CStr(state) & ":" & CStr(TaskState.Finished)
End Sub

Spiegazione dei parametri e dell’esecuzione:

Idle=0 e Queued=1 sono automatici. Working=10 cambia la sequenza, Finished=11. state As TaskState riceve 10. Main restituisce String "0:1:10:11"; CStr converte i numeri. Adattare i nomi al proprio script; la dichiarazione non avvia procedure.

2. Nascondere lo stato del modulo

# Controller.Mode è interno. NextMode riceve distance ByVal As Integer senza modificare l’argomento chiamante. distance<=1 sceglie Arrived=5, altrimenti Walking=4; state parte da 0. Main passa 3 e 1, riceve 4 e 5 e restituisce Integer 45. Nessun movimento: distance è un input dimostrativo. Fuori è accessibile Controller.NextMode, non Controller.Mode.Arrived.
Option Explicit On
Module Controller
    Private Enum Mode
        Idle
        Walking = 4
        Arrived
    End Enum

    Public Function NextMode(ByVal distance As Integer) As Integer
        Dim state As Mode
        If distance <= 1 Then
            state = Mode.Arrived
        Else
            state = Mode.Walking
        End If
        Return state
    End Function
End Module

Sub Main()
    Dim farState = Controller.NextMode(3)
    Dim nearState = Controller.NextMode(1)
    Return farState * 10 + nearState
End Sub

Spiegazione dei parametri e dell’esecuzione:

Controller.Mode è interno. NextMode riceve distance ByVal As Integer senza modificare l’argomento chiamante. distance<=1 sceglie Arrived=5, altrimenti Walking=4; state parte da 0. Main passa 3 e 1, riceve 4 e 5 e restituisce Integer 45. Nessun movimento: distance è un input dimostrativo. Fuori è accessibile Controller.NextMode, non Controller.Mode.Arrived.

3. Cambiare stato e restituire Boolean

# La precedente Const Integer FirstState=2 produce Idle=2, Working=3, Finished=4. Advance riceve state ByRef e modifica la variabile di Main; With Mode abbrevia i nomi, Select Case sceglie il passaggio. Due chiamate danno 2→3→4. IsFinal riceve una copia ByVal e confronta Finished: Main restituisce 1/True; dopo un solo passaggio sarebbe 0/False. Un altro Advance genera "No next state". Le costanti restano immutate.
Option Explicit On
Const FirstState As Integer = 2
Enum Mode
    Idle = FirstState
    Working = Idle + 1
    Finished
End Enum

Sub Advance(ByRef state As Mode)
    With Mode
        Select Case state
            Case .Idle
                state = .Working
            Case .Working
                state = .Finished
            Case Else
                Throw "No next state"
        End Select
    End With
End Sub

Function IsFinal(ByVal state As Mode) As Boolean
    Return state = Mode.Finished
End Function

Sub Main()
    Dim state As Mode = Mode.Idle
    Advance(state)
    Advance(state)
    Return IsFinal(state)
End Sub

Spiegazione dei parametri e dell’esecuzione:

La precedente Const Integer FirstState=2 produce Idle=2, Working=3, Finished=4. Advance riceve state ByRef e modifica la variabile di Main; With Mode abbrevia i nomi, Select Case sceglie il passaggio. Due chiamate danno 2→3→4. IsFinal riceve una copia ByVal e confronta Finished: Main restituisce 1/True; dopo un solo passaggio sarebbe 0/False. Un altro Advance genera "No next state". Le costanti restano immutate.


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

Basic