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

+, -, *, /, MOD

ClassicUO • Basic

Una expresión aritmética calcula un valor: + suma, - resta o cambia el signo, * multiplica, / divide y MOD devuelve el resto entero. Asigne el resultado a una variable o devuélvalo mediante RETURN.

Sintaxis exacta

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

Parámetros

  • left — Operando numérico izquierdo: literal, variable declarada, expresión entre paréntesis o resultado de función. El menos unario no tiene operando izquierdo.
  • right — Operando numérico derecho. En / es el divisor; en MOD debe seguir siendo distinto de cero tras convertirse a Integer. Por ejemplo, 0.5 se trunca a 0 y provoca un error.
  • operator / precedence — Prioridad: menos unario; después * / MOD al mismo nivel de izquierda a derecha; finalmente + - binarios de izquierda a derecha. Los paréntesis alteran el orden. No se admite más unario, potencia ^ ni división entera con barra inversa.

Devuelve

Integer para +, -, * y menos unario con enteros; Decimal si algún operando numérico participante es Decimal. / siempre devuelve Decimal: 5/2=2.5. MOD devuelve Integer. Es un número calculado; el significado de éxito o cantidad depende del script.

Comportamiento

  • MOD convierte ambos operandos a enteros con signo de 32 bits, truncando hacia cero las fracciones representables. El resto conserva el signo del dividendo: -17 MOD 5=-2; -2147483648 MOD -1=0. La combinación de mayúsculas, incluso mOd, no cambia el resultado.
  • MOD entre cero genera un error capturable con TRY/CATCH. / realiza división flotante: un numerador no nulo entre cero produce Infinity con signo, y 0/0 produce NaN. Compruebe el divisor si necesita un resultado finito.
  • Las operaciones enteras +, -, * y negación conservan los 32 bits bajos al desbordarse; no amplían el tipo automáticamente. Para cálculos grandes convierta antes un operando a Decimal si acepta aproximaciones. La aritmética flotante tiene redondeos binarios.
  • Los operadores numéricos ordinarios no interpretan texto automáticamente. String+String concatena, String+Integer falla. Elija una conversión explícita, por ejemplo CDbl. MOD infijo analiza texto entero de forma más estricta que la función BasicMod.
  • El evaluador calcula los operandos en el orden de la expresión, selecciona el token del operador y crea una InjectionValue. Las expresiones entre paréntesis terminan primero. Solo hay movimiento, espera o red si un operando llama a una API que los realiza.

Ejemplos

1. Prioridad y paréntesis

# plain=2+3*4 multiplica primero y vale 14. grouped=(2+3)*4 vale 20. Main devuelve plain*100+grouped=1420 para verificar ambos cálculos.
Option Explicit On
SUB Main()
    VAR plain = 2 + 3 * 4
    VAR grouped = (2 + 3) * 4
    RETURN plain * 100 + grouped
END SUB

Explicación de los parámetros y la ejecución:

plain=2+3*4 multiplica primero y vale 14. grouped=(2+3)4 vale 20. Main devuelve plain100+grouped=1420 para verificar ambos cálculos.

2. Lotes completos y objetos restantes

# DescribeBatches recibe total=27 y size=5. La comprobación rechaza tamaños nulos o negativos. Fix(total/size) convierte 5.4 en 5 lotes completos; total mOd size da 2 objetos restantes. CStr permite devolver el texto "5:2". La función auxiliar está definida por completo.
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

Explicación de los parámetros y la ejecución:

DescribeBatches recibe total=27 y size=5. La comprobación rechaza tamaños nulos o negativos. Fix(total/size) convierte 5.4 en 5 lotes completos; total mOd size da 2 objetos restantes. CStr permite devolver el texto "5:2". La función auxiliar está definida por completo.

3. Capturar un divisor inválido

# 10 MOD 0 genera un error antes de asignar unusedResult. CATCH lo guarda en problem y establece caught=TRUE. Main devuelve 1 como indicador de gestión del error del ejemplo, no como resultado del MOD fallido.
Option Explicit On
SUB Main()
    VAR caught = FALSE
    TRY
        VAR unusedResult = 10 MOD 0
    CATCH problem
        caught = TRUE
    END TRY
    RETURN caught
END SUB

Explicación de los parámetros y la ejecución:

10 MOD 0 genera un error antes de asignar unusedResult. CATCH lo guarda en problem y establece caught=TRUE. Main devuelve 1 como indicador de gestión del error del ejemplo, no como resultado del MOD fallido.


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

Basic