Articulo de referencia

Variable automática

En programación informática , una variable automática es una variable local que se asigna y libera automáticamente cuando el flujo del programa entra y sale de su ámbito. El ámb...

En programación informática , una variable automática es una variable local que se asigna y libera automáticamente cuando el flujo del programa entra y sale de su ámbito. El ámbito es el contexto léxico, en particular la función o el bloque en el que se define la variable. Los datos locales suelen ser invisibles (en la mayoría de los lenguajes) fuera de la función o el contexto léxico donde se definen. Los datos locales también son invisibles e inaccesibles para la función llamada [ nota 1 ] , pero no se liberan, sino que vuelven al ámbito cuando el hilo de ejecución regresa a la función que la llamó.

Las variables locales automáticas se aplican principalmente a lenguajes recursivos con ámbito léxico . [ nota 2 ] Las variables locales automáticas normalmente se asignan en el marco de pila del procedimiento en el que se declaran. [ nota 3 ] Esto se hizo originalmente para lograr la reentrada y permitir la recursión , [ nota 4 ] una consideración que aún se aplica hoy en día. El concepto de variables automáticas en funciones recursivas (y anidadas ) en un lenguaje con ámbito léxico se introdujo al público general con ALGOL a finales de la década de 1950, y fue popularizado aún más por sus numerosos descendientes.

El término variable local suele ser sinónimo de variable automática, ya que en muchos lenguajes de programación son lo mismo, pero local es más general: la mayoría de las variables locales son automáticas, pero también existen variables locales estáticas , sobre todo en C. En el caso de una variable local estática, la asignación es estática (su tiempo de vida abarca toda la ejecución del programa), no automática, sino que solo está dentro del ámbito durante la ejecución de la función.

En lenguajes de programación específicos

C, C++

En C y C++ (anterior a C++11), las variables declaradas con autose denominan variables automáticas .

Todas las variables declaradas dentro de un bloque de código son automáticas por defecto. Una variable automática no inicializada tiene un valor indefinido hasta que se le asigna un valor válido de su tipo. [ 1 ] También se puede agregar el especificador de clase de almacenamiento autoa estas declaraciones de variables, pero como todas son automáticas por defecto, esto es completamente redundante y rara vez se hace.

En C, usar la clase de almacenamiento registeres una sugerencia para que el compilador almacene en caché la variable en un registro del procesador. Salvo que no permita usar el operador de dirección ( &) en la variable o en cualquiera de sus subcomponentes, el compilador puede ignorar la sugerencia. [ 2 ]

En C++ , el constructor de las variables automáticas se llama cuando la ejecución llega al lugar de su declaración. El destructor se llama al final del bloque de programa (los bloques de programa se encierran entre llaves). Esta característica se usa frecuentemente para gestionar la asignación y liberación de recursos, como abrir y cerrar automáticamente archivos o liberar memoria, un proceso conocido como Adquisición de Recursos durante la Inicialización (RAII).

Desde C++11, C++ permite declarar variables con el autoespecificador de tipo, [ 3 ] pero esto significa que el tipo de la variable se infiere y no hace referencia al ámbito de la variable. C adoptó la inferencia de tipos para el autoespecificador de tipo a partir de C23 .

Java

En Java, las variables automáticas se denominan variables locales .

Similar a C y C++, pero no hay palabra clave auto`or` register. Sin embargo, el compilador de Java no permitirá el uso de una variable local no inicializada explícitamente y dará un error de compilación (a diferencia de C y C++, donde el compilador generalmente solo dará una advertencia). El estándar de Java exige que cada variable local debe inicializarse explícitamente antes de ser utilizada. [ 4 ] Esto difiere de las variables de instancia, que se inicializan implícitamente con valores predeterminados (que son0para números ynulopara objetos).

Perl

En Perl, las variables automáticas se denominan variables léxicas , my o privadas .

En Perl, las variables locales se declaran usando el myoperador. Los escalares no inicializados tendrán el valor undef; los arreglos o hashes no inicializados serán (). [ 5 ]

Perl también tiene un localoperador que no crea variables automáticas, [ 6 ] sino que asigna a las variables globales (de paquete) un valor temporal, cuyo ámbito se ajusta dinámicamente al bloque que las contiene. Cuando se sale del ámbito de la variable, se restaura el valor anterior.

Véase también

Notas

  1. a menos que sea una función anidada , que a su vez se define a lo largo de esos datos locales.
  2. aunque existen de forma algo similar, pero no idéntica, también en lenguajes recursivos con ámbito dinámico , como variantes más antiguas de LISP
  3. a menos que se especifique lo contrario, como datos estáticos o basados ​​en el montón, que se pueden especificar en algunos lenguajes.
  4. Cuando se utiliza la propiedad reentrante de la rutina, ya sea por recursión o por cualquier otro motivo, el optimizador no debeintentar asignar dichas variables en los registros del procesador (por eficiencia), ya que esto rompería la reentrada.

Referencias

  1. Actual"Estándar C" (PDF) . (3,61 MiB )  : sección 6.2.4, Duración del almacenamiento de objetos
  2. "Duración del almacenamiento" , cppreference.com
  3. "Especificadores de tipo de marcador de posición" , cppreference.com
  4. "4.12.5 Valores iniciales de las variables" . Sun Microsystems . Consultado el 17 de octubre de 2008 .
  5. "Variables privadas a través de my() - perlsub - perldoc.perl.org" . Consultado el 17 de octubre de 2008 .
  6. "Valores temporales mediante local() - perlsub - perldoc.perl.org" . Consultado el 25 de febrero de 2011 .