En este tema, exploraremos dos conceptos fundamentales en la programación: el alcance y la vida útil de las variables. Estos conceptos determinan dónde y cuándo se puede acceder a una variable en un programa. Comprender estos conceptos es crucial para escribir código eficiente y libre de errores.
- Alcance de las Variables
El alcance de una variable se refiere a la región del programa donde la variable es accesible. En Fortran, el alcance de una variable puede ser:
- Local: La variable es accesible solo dentro del bloque de código donde se declara.
- Global: La variable es accesible en todo el programa.
1.1 Alcance Local
Las variables locales se declaran dentro de subrutinas, funciones o bloques de código. Solo son accesibles dentro de ese bloque específico.
program local_scope_example implicit none call my_subroutine() contains subroutine my_subroutine() integer :: local_var local_var = 10 print *, "Local variable value: ", local_var end subroutine my_subroutine end program local_scope_example
En este ejemplo, local_var
es una variable local de la subrutina my_subroutine
y no es accesible fuera de ella.
1.2 Alcance Global
Las variables globales se declaran fuera de cualquier subrutina o función y son accesibles en todo el programa.
program global_scope_example implicit none integer :: global_var global_var = 20 call my_subroutine() print *, "Global variable value in main program: ", global_var contains subroutine my_subroutine() print *, "Global variable value in subroutine: ", global_var end subroutine my_subroutine end program global_scope_example
En este ejemplo, global_var
es una variable global y es accesible tanto en el programa principal como en la subrutina my_subroutine
.
- Vida Útil de las Variables
La vida útil de una variable se refiere al tiempo durante el cual la variable existe en la memoria. En Fortran, la vida útil de una variable puede ser:
- Automática: La variable existe solo durante la ejecución del bloque de código donde se declara.
- Estática: La variable existe durante toda la ejecución del programa.
2.1 Variables Automáticas
Las variables automáticas se crean cuando se entra en el bloque de código donde se declaran y se destruyen cuando se sale de ese bloque.
program automatic_lifetime_example implicit none call my_subroutine() contains subroutine my_subroutine() integer :: auto_var auto_var = 30 print *, "Automatic variable value: ", auto_var end subroutine my_subroutine end program automatic_lifetime_example
En este ejemplo, auto_var
es una variable automática que solo existe durante la ejecución de my_subroutine
.
2.2 Variables Estáticas
Las variables estáticas se declaran con el atributo save
y existen durante toda la ejecución del programa.
program static_lifetime_example implicit none call my_subroutine() call my_subroutine() contains subroutine my_subroutine() integer, save :: static_var = 0 static_var = static_var + 1 print *, "Static variable value: ", static_var end subroutine my_subroutine end program static_lifetime_example
En este ejemplo, static_var
es una variable estática que conserva su valor entre llamadas a my_subroutine
.
Ejercicios Prácticos
Ejercicio 1: Alcance de Variables
- Escribe un programa que declare una variable global y una variable local. Modifica ambas variables en una subrutina y muestra sus valores en el programa principal.
Ejercicio 2: Vida Útil de Variables
- Escribe un programa que utilice una variable automática y una variable estática dentro de una subrutina. Llama a la subrutina varias veces y observa cómo cambian los valores de las variables.
Soluciones
Solución Ejercicio 1
program scope_exercise implicit none integer :: global_var global_var = 5 call modify_variables() print *, "Global variable in main program: ", global_var contains subroutine modify_variables() integer :: local_var local_var = 10 global_var = global_var + 1 print *, "Local variable in subroutine: ", local_var print *, "Global variable in subroutine: ", global_var end subroutine modify_variables end program scope_exercise
Solución Ejercicio 2
program lifetime_exercise implicit none call test_lifetime() call test_lifetime() contains subroutine test_lifetime() integer :: auto_var integer, save :: static_var = 0 auto_var = 0 auto_var = auto_var + 1 static_var = static_var + 1 print *, "Automatic variable value: ", auto_var print *, "Static variable value: ", static_var end subroutine test_lifetime end program lifetime_exercise
Conclusión
En esta sección, hemos aprendido sobre el alcance y la vida útil de las variables en Fortran. Comprender estos conceptos es esencial para escribir programas eficientes y evitar errores comunes relacionados con el acceso y la gestión de variables. En el siguiente módulo, exploraremos estructuras de datos avanzadas, lo que nos permitirá manejar datos de manera más compleja y eficiente.
Curso de Programación en Fortran
Módulo 1: Introducción a Fortran
- Introducción a Fortran
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Escribiendo tu Primer Programa en Fortran
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
- Operadores y Expresiones
- Entrada y Salida
- Estructuras de Control: Sentencias If
- Estructuras de Control: Bucles
Módulo 3: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Operaciones con Arreglos y Cadenas
Módulo 4: Procedimientos y Funciones
Módulo 5: Estructuras de Datos Avanzadas
Módulo 6: Manejo de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Posicionamiento de Archivos
- Operaciones con Archivos Binarios
Módulo 7: Temas Avanzados
Módulo 8: Mejores Prácticas y Optimización
- Técnicas de Optimización de Código
- Depuración y Perfilado
- Escribiendo Código Mantenible
- Estándares y Portabilidad de Fortran