- Numéricos:
- Alfanuméricos
- Lógicos
La distinción entre enteros y reales es importante, ya que permite diferenciar entre los números del conjunto Z del resto de los números del conjunto R. A parte de la relevancia lógico-matemática que esto implica, esta diferenciación también tiene que ver con la gestión de la memoria RAM, por los motivos que veremos en su momento.
Los datos alfanuméricos, son en realidad un único tipo de datos que podemos declarar indistintamente como Carácter o como Cadena.
Finalmente los datos lógicos, también llamados booleanos, son los que adoptan como resultado dos valores lógicos: Verdadero o Falso. A pesar de su sencillez aparente, estos datos son de gran importancia para el desarrollo de un algoritmo, ya que permite desplegar toda la potencia de la lógica matemática.
Frente a la claridad terminológica con que el diccionario de la RAE aborda el concepto de dato, el de variable resulta insatisfactorio al no contemplar el significado principal que tiene en el ámbito de la programación. De hecho puede acentuar la confusión que existe al respecto, ya que refuerza la idea de variabilidad y cambio. Incluso el concepto matemático de variable incide en este rasgo ("Magnitud que puede tener un valor cualquiera de los comprendidos en un conjunto"), que si bien es pertinente, no es sustancial para la lógica de programación.
Para comprender la lógica de programación en lo tocante a las variables, es necesario destacar que una variable es, en realidad, un nombre o indicador de un espacio de la memoria RAM, una especie de identificador del casillero dentro de ésta, que es el espacio en el que se almacenan los datos.
Esto me lleva a ampliar mi primera definición de dato que ya señalé como provisional e incompleta: desde esta perspectiva, un dato es un contenido almacenado o adscrito en un espacio concreto de la memoria RAM al que se accede mediante un identificador llamado variable. Los datos son los contenidos con los que opera un algoritmo para resolver un problema.
Desde esta perspectiva no existe una diferencia sustancial entre variable y constante, ya que en cuanto a ser identificador de un espacio de memoria, nada las diferencia; tampoco el hecho de contener datos, pero si de lo que se trata es de comprender la diferencia funcional entre ambas, su distinción sí es pertinente y el significado matemático de variable se ajusta perfectamente a esta distinción: mientras que una variable puede cambiar de contenido a lo largo de un algoritmo, una constante permanece invariable, siendo ésta su característica específica y diferencial.
No obstante, la importancia de la dimensión "física" que subyace a una variable en cuanto a identificador de un espacio de memoria es fundamental para entender su relación con el contenido que almacena. Y es que entre dato y variable existe una determinación recíproca (o inter-determinación, si se me permite) que se expresa específicamente en el ámbito del análisis tipológico: todo cuanto antes dijimos sobre los tipos de datos es igualmente válido en cuanto a tipos de variable.
El trabajo que conlleva la correcta identificación de las variables de un programa y qué hacer con ellas es, en buena medida, uno de los trabajos principales del programador o programadora, siendo necesario realizar varias operaciones:
- Definir la o las variables
- Declararlas (o asignar tipo -> tipificarlas)
- Asignar los datos a las variables
- Y operar con ellas para obtener nuevos datos que, a su vez, se asignan a otras variables.
Algunos lenguajes de programación son más flexibles que otros en lo tocante a la definición y declaración de las variables, lo que personalmente no considero ninguna ventaja por los errores que esto puede producir, además de ocultar, hasta cierto punto, las restricciones recíprocas que son consustanciales con la inter-determinación antes señalada entre datos y variables. No obstante, todos los lenguajes guardan coherencia con este principio básico: no se pueden mezclar churras con merinas... salvo que estemos hablando de ovejas en general y la distinción de razas (tipos) sea irrelevante, algo que no suele ocurrir en programación y que, en ese caso, se encuentra sometido a otra lógica.
Cuando es prescriptivo definir o declarar una variable, es un proceso que se resuelve con una única expresión pero encubre, en realidad, tres procesos que están, eso sí, íntimamente relacionados:
- Declarar o denominar (dar nombre) la variable
- Determinar o definir su tipología.
- Dimensionar y ajustar el espacio de memoria RAM denominada/identificada mediante el nombre de la variable.
Aunque lo común es denominar estos tres procesos con un único término, éste puede cambiar en función de en qué parte del proceso se ponga el acento: mientras que en PSeInt se hace sobre la definición tipológica (Definir var1 Como Tipo), en los lenguajes Basic se usa la expresión Dim (dimensión/dimensionar), que mantiene al uso inicial dentro de este lenguaje en referencia al establecimiento de las dimensiones de una matriz de datos (o array), que se traslada al manejo de variables. Pero otra denominación de este proceso es declarar, que será la que utilizaré en este blog.
Con independencia del interés de esta cuestión, que no es únicamente por lo que hemos visto, hay otras de mayor transcendencia práctica. Aunque por ahora no las abordaré todas, sí me interesa tratar una de ellas: es necesario saber si el lenguaje de programación por el que optamos exige o no declarar las variables y las constantes que se van a emplear, si da opción a hacerlo explícitamente (como es el caso de OOo Basic) o si permite o impone de alguna manera la "declaración implícita". Este último es el caso de Python: en este lenguaje no existe declaración específica, sino que se realiza implícitamente en el momento de realizar la asignación de datos a las variables.
Y al entrar en este tema, nos enfrentamos necesariamente con el concepto de operador, que podemos definir como el elemento del lenguaje de programación que permite relacionar variables y concretar qué hacer con su contenido.
Ya hemos visto uno de los operadores de mayor frecuencia de uso: el operador de asignación. Más abajo vamos a volver sobre él, pero ahora quiero resaltar que el modo en que se expresan las instrucciones de asignación refleja la naturaleza de una variable: ser etiqueta identificadora de su contenido (el dato) que se almacena en un espacio de memoria. En este último sentido, la variable es el puntero que señala la ubicación del espacio de memoria.
Existen también distintos tipos de operadores, así como tipologías diferentes según autores. Algunas son más amplias y otras restringidas. En el primer caso (que es el que empleo) se habla de los siguientes tipos:
- De asignación
- De concatenación
- Algebraicos
- Relacionales
- Y lógicos.
Algunos operadores está restringidos a determinados tipos de variables, pero otros son de carácter universal (se usan con los diferentes tipos de variables). De momento vamos a recordar el de asignación, que pertenece al primer grupo. Y digo recordar porque ya te hablé de él. El resto serán explicados más adelante, en relación con la exposición sobre los tipos de datos/variables y sus características.
El operador de asignación se representa en OOo Basic como = y la expresión resultante se lee de derecha a izquierda:
- NombreVariable <- DatoX se lee: el dato X está asignado a la variable NombreVariable, lo que permite al algoritmo utilizar el nombre de la variable (en lugar del valor asignado a ésta) en la formulación del resto de las instrucciones en que dicho dato sea empleado.
- No obstante, aunque <- es la representación universal, el signo más empleado en los lenguajes de programación es el signo =.
No hay comentarios:
Publicar un comentario
Comenta esta entrada