lunes, 19 de junio de 2023

OOo Basic. Datos

Variables numéricas (1)

Existen en OOo Basic cinco tipos de variables numéricas, tres de tipo entero y dos de tipo decimal o de coma flotante. Las variables numéricas son las segundas en importancia de uso en los script útiles para la intervención de los SEO, tanto para los cálculos internos del script como para el manejo de la información documental. Un ejemplo claro es un docap sobre pruebas de evaluación; otro podría ser (aunque no lo es con la suficiente frecuencia) el análisis de las propias actuaciones. En ambos contextos, el manejo de datos numéricos son fundamentales.




Podría parecer que tanto tipo de variables numéricas fuera innecesario, y en la práctica suele ser suficiente con un par de ellas (una de tipo entero y  otra de tipo decimal), pero para usos amplios del lenguaje sí es necesario, ya que mejora el uso de la memoria RAM del ordenador. veamos cuáles son esos tipos de variables.

Para ello nada mejor que esta tabla extraída del manual de Mauricio Baeza que nos ayudará a identificar con rapidez el nombre, el tipo y los datos que contiene cada una de esas variable.

Posiblemente te habrás dado cuenta que los tipos mas usados van a ser dos: Integer y Single, uno de cada tipo (entero y decimal). El tipo Byte (entero) podría ser más que suficiente para la mayoría de nuestros script, pero tiene un límite superior muy bajo, por lo que se puede ver desbordado con facilidad. Single tiene el "problema" de ser menos conocido que Double, por lo que es más frecuente usar el tipo más amplio con el consecuente desperdicio de memoria, por eso he optado por privilegiarlo.

No obstante, según los números que se manejes y las operaciones que se realicen con ellos, debemos contar con todos los tipos numéricos disponibles, ya que nuestra primera elección puede resultar inapropiada como resultado de la operatoria. Ese es el caso de Integer frente a Long y de Single frente a Double, pero no sólo, ya que no es infrecuente que de la operatoria entre dos valores Integer surja como resultado un valor decimal (Single o Double).

Finalmente Currency es un tipo derivado o de segundo nivel y tiene características muy específicas por su naturaleza, siendo su uso muy recomendable para el tratamiento de valores monetarios en contextos específicos de contabilidad o gestión económica. Al margen de estas situaciones, su uso es más bien irrelevante, como en nuestro contexto profesional.

La forma de trabajar con estas variables es la misma que con las variables alfanuméricas:

  • Declaramos y tipificamos: Dim Num as Integer
  • Y asignamos contenido, bien directamente [num= 24], bien como resultados del procesamiento de otras variables o datos [num= 20 + 5 , num = num1 + num2]. En este segundo caso ya entramos en la fase Procesamiento. (2)

Ahí es donde entran en juego los operadores aritméticos, que son los signos que empleamos para representar las operaciones aritméticas. No son los únicos que podemos utilizar con las variables numéricas (veremos otros en otras entradas), pero sí los más frecuentes. El manual de Mauricio Baeza simplifica nuestra exposición (3).


Es de interés explicar más detalladamente tres operadores relacionados con la división, por la importancia de su uso en la práctica. Me refiero a los operadores / (división con posible cociente decimal) frente a la división entera (\), donde el resultado (cociente) siempre será un número entero (la operación se "detiene" una vez obtenida la parte entera, quedando el resto como tal). La información sobre esta última división (\) se complementa con el operador Mod, que devuelve el resto de esa división (que devuelve el resto, esto es: "lo que queda sin repartir"). 

Diferentes script plantean algunas de las cuestiones que pueden ser de interés:
  • Errores por encadenamiento vs. suma, como el que se muestra en el script Operaciones1, cuando "sumamos" un valor numérico con otro alfanumérico...

Sub Operaciones1

Dim NumA As string
Dim NumB As Byte, NumR As Byte

NumA = "25"
NumB = 2

NumR = NumA + NumB             -> Resultados 252, encadena 25 y 2

NumR = CInt(NumA) + NumB    -> Resultado 27, suma 25+2


End sub

... obteniendo como resultado la concatenación de ambos. Para evitarlo es necesario convertir previamente el valor alfanumérico en numérico mediante CInt()

  • Errores por truncamiento, que se producen cuando, necesitando precisión, utilizamos variables enteras y obtenemos un resultado que trunca la parte decimal. El resultado es correcto en función de las variables utilizadas, pero no desde la perspectiva de la operación, lo que puede dar lugar a errores de apreciación.
  • También se pueden dar errores por desbordamiento, que son resultado de una operación que desborda las dimensiones del tipo de variable al que se asigna. Un ejemplo lo podemos ver en el script Operaciones3

Sub Operaciones3

Dim Num1 As Integer
Dim NumR As Long

Num1 = 234

NumR = Num1 ^ 2

End Sub

... que provoca error por desbordamiento en NumR; error que desaparece si transformamos esta variable al tipo Long.

El documento para trabajar con estos script [está aquí a tu disposición]. 

NOTAS

(1) Entrada publicada el 19/06/2023 revisada el 2/05/2024. Las modificaciones son mínimas, por lo que se mantiene la fecha de la publicación original.

(2) Observa que, al contrario que los datos alfanuméricos, los numéricos no se escriben entrecomillados. Precisamente la diferencia tipológica entre "24" como cadena alfanumérica y 24 como número se identifica por el uso/no uso de las comillas.

(3) No son estos los únicos operadores aritméticos, como podemos ver en [Walter Mora; F] (pp. 24-24), pero sí los de uso más frecuente. En Mora se recogen mezclados operadores y funciones con función de operadores, y no sólo de tipo aritmético, por lo que resulta un tanto confuso para nuestra exposición.

No hay comentarios:

Publicar un comentario

Comenta esta entrada