Nombre del contenedor para un tipo particular de datos
En programación informática, una variable es una ubicación de almacenamiento abstracta, asociada a un nombre simbólico, que contiene una cantidad conocida o desconocida de datos u objetos, denominada valor; o, en términos más simples, una variable es un contenedor con nombre para un conjunto específico de bits o tipo de datos (como entero, flotante, cadena, etc.). Una variable puede asociarse o identificarse mediante una dirección de memoria. El nombre de la variable es la forma habitual de referenciar el valor almacenado, además de referirse a la propia variable, según el contexto. Esta separación entre nombre y contenido permite que el nombre se utilice independientemente de la información exacta que representa. El identificador en el código fuente puede vincularse a un valor durante la ejecución del programa, y por lo tanto, el valor de la variable puede cambiar durante la ejecución del programa.Las variables en programación pueden no corresponder directamente al concepto de variable en matemáticas. Este último es abstracto y no hace referencia a un objeto físico como la ubicación de almacenamiento. El valor de una variable computacional no forma parte necesariamente de una ecuación o fórmula, como en matemáticas. En programación informática, las variables suelen recibir nombres largos para que describan su uso de forma relativamente descriptiva, mientras que en matemáticas suelen tener nombres concisos, de uno o dos caracteres, para mayor brevedad en la transcripción y manipulación.La ubicación de almacenamiento de una variable puede estar referenciada por varios identificadores diferentes, lo que se conoce como alias. Asignar un valor a la variable mediante uno de los identificadores cambiará el valor accesible mediante los demás identificadores.Los compiladores deben reemplazar los nombres simbólicos de las variables con las ubicaciones reales de los datos. Si bien el nombre, el tipo y la ubicación de una variable suelen ser fijos, los datos almacenados en la ubicación pueden cambiar durante la ejecución del programa.
Acciones sobre una variable
En los lenguajes de programación imperativos, generalmente se puede acceder a los valores o modificarlos en cualquier momento. En los lenguajes funcionales y lógicos puros, las variables están ligadas a expresiones y mantienen un único valor durante toda su vida útil debido a los requisitos de transparencia referencial. En los lenguajes imperativos, las constantes (con nombre) (constantes simbólicas) exhiben el mismo comportamiento, que generalmente se contrastan con las variables (normales).Dependiendo del sistema de tipos de un lenguaje de programación, las variables pueden almacenar únicamente un tipo de dato específico (por ejemplo, entero o cadena). Alternativamente, un tipo de dato puede estar asociado únicamente al valor actual, lo que permite que una sola variable almacene cualquier dato compatible con el lenguaje de programación. Las variables son los contenedores donde se almacenan los valores.Variables y alcance:
- Variables automáticas: Cada variable local en una función viene a existir sólo cuando se llama la función, y desaparece cuando la función se sale. Tales variables se conocen como variables automáticas.
- Variables externas: Estas son variables que son externas a una función y pueden ser accedidas por nombre por cualquier función. Estas variables permanecen en existencia permanentemente; en lugar de aparecer y desaparecer a medida que se llaman y salen las funciones, conservan sus valores incluso después de las funciones que los han devuelto.
Identificadores haciendo referencia a una variable
Un identificador que hace referencia a una variable puede utilizarse para acceder a ella y leer su valor, modificarlo o editar otros atributos de la variable, como permisos de acceso, bloqueos, semáforos, etc.
Por ejemplo, una variable podría ser referenciada por el identificador "total_count" y la variable puede contener el número 1956. Si la misma variable es referenciada por el identificador "r" Además, si se usa este identificador "r", el valor de la variable se modifica a 2009. Por lo tanto, al leer el valor con el identificador "total_count", se obtendrá el resultado 2009 y no 1956.
Si una variable solo se referencia mediante un identificador, este puede llamarse simplemente
el nombre de la variable; de lo contrario, podemos hablar de él como
uno de los nombres de la variable. Por ejemplo, en el ejemplo anterior, el identificador "
total_count" es el nombre de la variable en cuestión, y "
r" es otro nombre de la misma variable.
Alcance y alcance
El alcance de una variable describe dónde se puede usar en el texto de un programa, mientras que la extensión (también llamada vida útil) describe cuándo, durante la ejecución del programa, la variable tiene un valor significativo. El alcance de una variable afecta su extensión. El alcance de una variable es, en realidad, una propiedad del nombre de la variable, y la extensión es una propiedad de su ubicación de almacenamiento. Estos no deben confundirse con el contexto (también llamado entorno), que es una propiedad del programa y varía según el punto del texto o la ejecución del programa (véase "Alcance": una descripción general). Además, la vida útil de un objeto puede coincidir con la de una variable, pero en muchos casos no está vinculada a ella.El
ámbito es una parte importante de la resolución de nombres de una variable. La mayoría de los lenguajes definen un
ámbito específico para cada variable (así como para cualquier otra entidad con nombre), que puede variar dentro de un programa determinado. El ámbito de una variable es la parte del texto del programa para la cual su nombre tiene significado y para la cual se dice que la variable es "visible". La entrada en dicho ámbito suele iniciar el ciclo de vida de una variable (al entrar en contexto) y la salida de dicho ámbito suele finalizarlo (al salir de contexto). Por ejemplo, una variable con "ámbito léxico" solo tiene sentido dentro de una función o subrutina determinada, o, más precisamente, dentro de un bloque de expresiones o sentencias (según el ámbito de la función o del bloque); esto es resolución estática, ejecutable en tiempo de análisis o de compilación. Alternativamente, una variable con ámbito dinámico se resuelve en tiempo de ejecución, basándose en una pila de enlaces global que depende del flujo de control específico. Las variables a las que solo se puede acceder dentro de ciertas funciones se denominan "variables locales". Una "variable global", o una con alcance indefinido, puede tener referencias en cualquier parte del programa.
Extensión, por otro lado, es un aspecto dinámico de una variable en tiempo de ejecución. Cada enlace de una variable a un valor puede tener su propia extensión en tiempo de ejecución. La extensión del enlace es la parte del tiempo de ejecución del programa durante la cual la variable continúa haciendo referencia al mismo valor o ubicación de memoria. Un programa en ejecución puede entrar y salir de una extensión dada muchas veces, como en el caso de un cierre.
A menos que el lenguaje de programación cuente con recolección de elementos no utilizados, una variable cuya extensión sobrepase permanentemente su alcance puede provocar una fuga de memoria. Por lo tanto, la memoria asignada a la variable nunca podrá liberarse, ya que la variable que se usaría para referenciarla para fines de desasignación ya no es accesible. Sin embargo, se puede permitir que una vinculación de variable se extienda más allá de su alcance, como ocurre en los cierres de Lisp y las variables locales estáticas de C; cuando la ejecución vuelve al alcance de la variable, esta puede volver a utilizarse. Una variable cuyo alcance comienza antes que el suyo se considera
no inicializada y, a menudo, tiene un valor arbitrario indefinido si se accede a ella (véase puntero salvaje), ya que aún no se le ha asignado explícitamente un valor particular. Una variable cuya extensión termina antes que su alcance puede convertirse en un puntero colgante y considerarse no inicializada una vez más, ya que su valor se ha destruido. Las variables descritas en los dos casos anteriores pueden considerarse
fuera de alcance o
no enlazadas. En muchos lenguajes, es un error intentar usar el valor de una variable cuando está fuera de su extensión. En otros lenguajes, esto puede generar resultados impredecibles. Sin embargo, a dicha variable se le puede asignar un nuevo valor, lo que le otorga una nueva extensión.Para optimizar el espacio, el espacio de memoria necesario para una variable solo se asigna cuando esta se usa por primera vez y se libera cuando ya no se necesita. Una variable solo es necesaria cuando está dentro del ámbito de aplicación, por lo que comenzar su ciclo de vida al entrar en el ámbito de aplicación puede dar lugar a variables no utilizadas. Para evitar desperdiciar este espacio, los compiladores suelen advertir a los programadores si una variable se declara pero no se usa.Se considera una buena práctica de programación limitar al máximo el alcance de las variables para evitar que las diferentes partes de un programa interactúen accidentalmente modificando sus variables. Esto también evita acciones a distancia. Las técnicas habituales para ello son que las diferentes secciones de un programa utilicen espacios de nombres diferentes o que las variables individuales sean "privadas" mediante el alcance dinámico o léxico.Muchos lenguajes de programación emplean un valor reservado (a menudo llamado
null o
nil) para indicar una variable no válida o no inicializada.
Tipografía
En lenguajes de tipado estático como C, C++, Java o C#, una variable también tiene un tipo, lo que significa que solo se pueden almacenar ciertos tipos de valores. Por ejemplo, una variable de tipo entero no puede almacenar valores de texto.En lenguajes de tipado dinámico como Python, el tipo de una variable se infiere por su valor y puede cambiar según este. En Common Lisp, ambas situaciones se dan simultáneamente: a una variable se le asigna un tipo (si no se declara, se asume que es
T, el supertipo universal) que existe en tiempo de compilación. Los valores también tienen tipos, que pueden comprobarse y consultarse en tiempo de ejecución.La tipificación de variables también permite resolver polimorfismos en tiempo de compilación. Sin embargo, esto difiere del polimorfismo utilizado en las llamadas a funciones orientadas a objetos (denominadas funciones virtuales en C++), que resuelve la llamada según el tipo de valor, en lugar de los supertipos permitidos para la variable.Las variables suelen almacenar datos simples, como enteros y cadenas literales, pero algunos lenguajes de programación permiten que una variable también almacene valores de otros tipos de datos. Estos lenguajes también permiten que las funciones sean polimórficas paramétricas. Estas funciones operan como variables para representar datos de múltiples tipos. Por ejemplo, una función llamada
length puede determinar la longitud de una lista. Dicha función
length puede ser polimórfica paramétrica al incluir una variable de tipo en su firma de tipo, ya que el número de elementos en la lista es independiente de los tipos de los elementos.
Parámetros
Los parámetros formales (o argumentos formales) de las funciones también se denominan variables. Por ejemplo, en este segmento de código Python:
, titulado def add_two()x):... Regreso x + 2..., titulado add_two()5)7
La variable
x es un
parámetro porque recibe un valor al llamar a la función. El entero 5 es el
argumento que le otorga a
x su valor. En la mayoría de los lenguajes, los parámetros de función tienen alcance local. Esta variable específica llamada
x solo puede referenciarse dentro de la función
add_two (aunque, por supuesto, otras funciones también pueden tener variables llamadas
x).
Asignación de memoria
Los detalles de la asignación de variables y la representación de sus valores varían ampliamente, tanto entre lenguajes de programación como entre implementaciones de un lenguaje dado. Muchas implementaciones de lenguajes asignan espacio para variables locales, cuya extensión dura una sola llamada a una función en la pila de llamadas, y cuya memoria se recupera automáticamente cuando la función retorna. De forma más general, en la vinculación de nombres, el nombre de una variable se vincula a la dirección de un bloque específico (secuencia contigua) de bytes en memoria, y las operaciones sobre la variable manipulan ese bloque. La referenciación es más común para variables cuyos valores tienen tamaños grandes o desconocidos al compilar el código. Dichas variables referencian la ubicación del valor en lugar de almacenar el valor en sí, que se asigna desde un conjunto de memoria llamado montón.Las variables ligadas tienen valores. Sin embargo, un valor es una abstracción, una idea; en la implementación, un valor se representa mediante un objeto de datos, que se almacena en la memoria del ordenador. El programa, o el entorno de ejecución, debe reservar memoria para cada objeto de datos y, dado que la memoria es finita, garantizar que esta memoria se libere para su reutilización cuando el objeto ya no sea necesario para representar el valor de alguna variable.Los objetos asignados desde el montón deben recuperarse, especialmente cuando ya no son necesarios. En un lenguaje con recolección de basura (como C#, Java, Python, Golang y Lisp), el entorno de ejecución recupera automáticamente los objetos cuando las variables existentes ya no pueden hacer referencia a ellos. En lenguajes sin recolección de basura, como C, el programa (y el programador) deben asignar memoria explícitamente y luego liberarla para recuperarla. De no hacerlo, se producen fugas de memoria, en las que el montón se agota mientras el programa se ejecuta, con el riesgo de un fallo eventual por agotamiento de la memoria disponible.Cuando una variable hace referencia a una estructura de datos creada dinámicamente, es posible que algunos de sus componentes solo sean accesibles indirectamente a través de la variable. En tales circunstancias, los recolectores de basura (o funciones de programa análogas en lenguajes que carecen de ellos) deben gestionar un caso en el que solo sea necesario recuperar una parte de la memoria accesible desde la variable.
Convenciones de nombres
A diferencia de sus contrapartes matemáticas, las variables y constantes de programación suelen tener nombres de varios caracteres, por ejemplo,
COSTO o
total. Los nombres de un solo carácter se usan generalmente solo para variables auxiliares. Por ejemplo,
i,
j,
k para variables de índice de matriz.Algunas convenciones de nomenclatura se aplican a nivel de lenguaje como parte de la sintaxis del lenguaje, lo que implica el formato de los identificadores válidos. En casi todos los lenguajes, los nombres de variable no pueden empezar con un dígito (0-9) ni contener espacios en blanco. La permisión de signos de puntuación en los nombres de variable varía según el lenguaje; muchos lenguajes solo permiten el guión bajo ("_") y prohíben cualquier otro signo de puntuación. En algunos lenguajes de programación, se añaden sigilos (símbolos o puntuación) a los identificadores de variable para indicar el tipo de dato o el alcance de la variable.La distinción entre mayúsculas y minúsculas en los nombres de variables también varía entre idiomas, y algunos requieren el uso de mayúsculas y minúsculas al nombrar ciertas entidades. La mayoría de los idiomas modernos distinguen entre mayúsculas y minúsculas; algunos idiomas antiguos no. Algunos idiomas reservan ciertas formas de nombres de variables para su uso interno; en muchos idiomas, los nombres que empiezan con dos guiones bajos ("__") suelen caer en esta categoría.Sin embargo, más allá de las restricciones básicas impuestas por un lenguaje, la nomenclatura de las variables es en gran medida una cuestión de estilo. A nivel de código máquina, no se utilizan nombres de variables, por lo que los nombres exactos elegidos no son relevantes para la computadora. Por lo tanto, los nombres de las variables las identifican; por lo demás, son solo una herramienta para que los programadores faciliten la escritura y la comprensión de los programas. Usar nombres de variable mal elegidos puede dificultar la revisión del código en comparación con nombres poco descriptivos, por lo que se recomiendan nombres claros.Los programadores suelen crear y adherirse a directrices de estilo de código que ofrecen orientación sobre la nomenclatura de variables o imponen un esquema de nomenclatura preciso. Los nombres cortos se escriben más rápido, pero son menos descriptivos; los nombres largos suelen facilitar la lectura de los programas y la comprensión del propósito de las variables. Sin embargo, una verbosidad excesiva en los nombres de variables también puede resultar en un código menos comprensible.
Tipos variables (basados en la vida)
Podemos clasificar las variables según su duración. Los diferentes tipos de variables son estáticas, dinámicas de pila, dinámicas de montón explícitas y dinámicas de montón implícitas. Una variable estática, también conocida como variable global, está vinculada a una celda de memoria antes de que comience la ejecución y permanece en la misma celda de memoria hasta la terminación. Un ejemplo típico son las variables estáticas en C y C++. Una variable dinámica de pila se conoce como variable local, la cual se vincula cuando se ejecuta la declaración y se desasigna cuando el procedimiento retorna. Los principales ejemplos son las variables locales en subprogramas de C y métodos de Java. Las variables dinámicas de montón explícitas son celdas de memoria sin nombre (abstractas) que se asignan y desasignan mediante instrucciones explícitas en tiempo de ejecución especificadas por el programador. Los principales ejemplos son los objetos dinámicos en C++ (mediante new y delete) y todos los objetos en Java. Las variables dinámicas de montón implícitas están vinculadas al almacenamiento de montón solo cuando se les asignan valores. La asignación y la liberación ocurren cuando se reasignan valores a las variables. Como resultado, las variables dinámicas de montón implícitas ofrecen el mayor grado de flexibilidad. Los principales ejemplos son algunas variables en JavaScript, PHP y todas las variables en APL.
Véase también
Portal de programación informática
- Variable de control (programación)
- Variable no local
- Variable temporal
- Interpolación variable
- Scalar (mathematics)
Notas
- ^ Por ejemplo, Haskell requiere que los nombres de tipos comiencen con una letra mayúscula.
Referencias
- ^ Brookshear 2019, p. 249, "Variables y Tipos de Datos", "los lenguajes de programación de alto nivel permiten que las ubicaciones en la memoria principal sean referenciadas por nombres descriptivos en lugar de por direcciones numéricas".
- ^ Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D. (1986), Compiladores: Principios, Técnicas y Herramientas, pp. 26 –28, Bibcode:1986cptt.book.... A
- ^ Knuth, Donald (1997). El arte de la programación informáticaVol. 1 (3rd ed.). Reading, Massachusetts: Addison-Wesley. pp. 3-4. ISBN 0-201-89683-4.
- ^ "Programación con variables". Khan Academy. Retrieved 23 de marzo 2020.
- ^ "Scratch for Budding Coders". Harvard. Archivado desde el original el 23 de marzo de 2020. Retrieved 23 de marzo 2020.
- ^ "Static typing - MDN Web Docs Glosario: Definiciones de términos relacionados con la Web tención MDN". developer.mozilla.org. 2023-06-08. Retrieved 2024-05-06.
- ^ Cómo no escoger variables Archivado 2016-12-21 en la máquina Wayback, Consultado el 11 de julio de 2012 [DEAD LINK]
- ^ Edsger Dijkstra, ¡Al diablo con "significadores significativos"!
Obras citadas
- Brookshear, J. Glenn (2019). "Computer Science: An Overview" (PDF). Retrieved 2024-04-01.
Tipos de datos |
|---|
| No interpretada | - Bit
- Byte
- Trit
- Pruebe.
- Palabra
- Bit array
|
|---|
| Numeric | - Arbitrary-precision o bignum
- Complejo
- Decimal
- Punto fijo
- Bloqueo punto flotante
- Punto de flotación
- Reducir la precisión
- Minifloat
- Media precisión
- bfloat16
- Precisión sencilla
- Doble precisión
- Precisión cuádruple
- Precisión Octuple
- Precisión ampliada
- Integer
- Interval
- Racional
|
|---|
| Pointer | |
|---|
| Texto | |
|---|
| Compuesto | - Tipo de datos algebraicos
- Array
- Conjunto asociativo
- Clase
- Dependencias
- Igualdad
- Inductivo
- Intersección
- Lista
- Objeto
- Tipo de opción
- Producto
- Record o Struct
- Refinement
- Set
- Unión
|
|---|
| Otros | - Boolean
- Tipo de átomo
- Colección
- Tipo enriquecido
- Excepciones
- Tipo de función
- Tipo de datos opacos
- Tipo de datos recuperativos
- Semaphore
- Corriente
- Identificador de tipo fuerte
- Tipo superior
- Clase de tipo
- Tipo de vacío
- Tipo de unidad
- Vacío
|
|---|
Relacionados Temas | - Tipo de datos abstractos
- Boxeo
- Estructura de datos
- Genérico
- Tipo
- Polimorfismo paramétrico
- Tipo de datos primitivos
- Interfaz
- Subtítulos
- Tipo constructor
- Conversión de tipo
- Sistema de tipo
- Tipo teoría
- Variable
|
|---|
Más resultados...