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

+, -, *, /, MOD

ClassicUO • Basic

Un’espressione aritmetica calcola un valore: + somma, - sottrae o cambia segno, * moltiplica, / divide, MOD restituisce il resto intero. Assegnare il risultato a una variabile oppure restituirlo con RETURN.

Sintassi esatta

left + right
left - right
-right
left * right
left / right
left MOD right
(expression)

Parametri

  • left — Operando numerico sinistro: letterale, variabile dichiarata, espressione tra parentesi o risultato di funzione. Il meno unario non ha operando sinistro.
  • right — Operando numerico destro. Per / è il divisore; per MOD deve rimanere diverso da zero dopo la conversione in Integer. Ad esempio 0.5 viene troncato a 0 e causa un errore.
  • operator / precedence — Precedenza: meno unario, poi * / MOD allo stesso livello da sinistra a destra, poi + - binari da sinistra a destra. Le parentesi modificano l’ordine. Più unario, potenza ^ e divisione intera con barra inversa non sono supportati.

Restituisce

Integer per +, -, * e meno unario su interi; Decimal se un operando numerico coinvolto è Decimal. / restituisce sempre Decimal: 5/2=2.5. MOD restituisce Integer. È un numero calcolato; il significato di successo o quantità dipende dallo script.

Comportamento

  • MOD converte entrambi gli operandi in interi con segno a 32 bit, troncando verso zero le frazioni rappresentabili. Il resto conserva il segno del dividendo: -17 MOD 5=-2; -2147483648 MOD -1=0. Anche la grafia mOd funziona.
  • MOD per zero genera un errore gestibile con TRY/CATCH. / usa la divisione in virgola mobile: un numeratore non nullo diviso per zero produce Infinity con segno, 0/0 produce NaN. Controllare il divisore se serve un risultato finito.
  • Le operazioni intere +, -, * e negazione mantengono i 32 bit bassi in caso di overflow, senza promozione automatica. Convertire prima un operando in Decimal per grandi calcoli se l’approssimazione è accettabile. I calcoli decimali hanno arrotondamenti binari.
  • Gli operatori numerici ordinari non interpretano automaticamente il testo. String+String concatena, String+Integer fallisce. Usare una conversione esplicita, ad esempio CDbl. MOD infisso interpreta il testo intero più rigorosamente della funzione separata BasicMod.
  • L’interprete valuta gli operandi nell’ordine dell’espressione, seleziona il token operatore e crea una InjectionValue. Le espressioni tra parentesi terminano prima. Movimento, attesa o rete avvengono solo se un operando richiama una relativa API.

Esempi

1. Precedenza e parentesi

# plain=2+3*4 esegue prima la moltiplicazione e vale 14. grouped=(2+3)*4 vale 20. Main restituisce plain*100+grouped=1420 per verificare entrambi i calcoli.
Option Explicit On
SUB Main()
    VAR plain = 2 + 3 * 4
    VAR grouped = (2 + 3) * 4
    RETURN plain * 100 + grouped
END SUB

Spiegazione dei parametri e dell’esecuzione:

plain=2+3*4 esegue prima la moltiplicazione e vale 14. grouped=(2+3)4 vale 20. Main restituisce plain100+grouped=1420 per verificare entrambi i calcoli.

2. Gruppi completi e oggetti rimasti

# DescribeBatches riceve total=27 e size=5. La guardia rifiuta dimensioni nulle o negative. Fix(total/size) trasforma 5.4 in 5 gruppi completi; total mOd size dà 2 oggetti rimasti. CStr converte i numeri nel testo restituito "5:2". La funzione ausiliaria è definita per intero.
Option Explicit On
FUNCTION DescribeBatches(total, size)
    IF size <= 0 THEN
        RETURN "invalid"
    END IF
    VAR whole = Fix(total / size)
    VAR remaining = total mOd size
    RETURN CStr(whole) + ":" + CStr(remaining)
END FUNCTION
SUB Main()
    RETURN DescribeBatches(27, 5)
END SUB

Spiegazione dei parametri e dell’esecuzione:

DescribeBatches riceve total=27 e size=5. La guardia rifiuta dimensioni nulle o negative. Fix(total/size) trasforma 5.4 in 5 gruppi completi; total mOd size dà 2 oggetti rimasti. CStr converte i numeri nel testo restituito "5:2". La funzione ausiliaria è definita per intero.

3. Gestire un divisore non valido

# 10 MOD 0 genera un errore prima dell’assegnazione a unusedResult. CATCH lo salva in problem e imposta caught=TRUE. Main restituisce 1 come indicatore della gestione dell’errore nell’esempio, non come risultato del MOD fallito.
Option Explicit On
SUB Main()
    VAR caught = FALSE
    TRY
        VAR unusedResult = 10 MOD 0
    CATCH problem
        caught = TRUE
    END TRY
    RETURN caught
END SUB

Spiegazione dei parametri e dell’esecuzione:

10 MOD 0 genera un errore prima dell’assegnazione a unusedResult. CATCH lo salva in problem e imposta caught=TRUE. Main restituisce 1 come indicatore della gestione dell’errore nell’esempio, non come risultato del MOD fallito.


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

Basic