close
Ir al contenido

Subrutina

De Wikipedia, la enciclopedia libre
Diagrama del funcionamiento de una subrutina.

En informática, una subrutina o subprograma (también llamada procedimiento, función, rutina o método), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea específica. Algunos lenguajes de programación, como Visual Basic .NET o Fortran, utilizan el nombre función para referirse a subrutinas que devuelven un valor.

Concepto de subrutina

[editar]

Una subrutina es un segmento de código que se desarrolla de forma separada al bloque principal de un algoritmo, diseñado para agrupar un conjunto de instrucciones específicas que realizan una tarea determinada.

Su uso es fundamental en el desarrollo de software y algoritmos, ya que permite estructurar y modularizar el código mediante la definición de parámetros o argumentos. Al ser invocada o "llamada" por su nombre desde el bloque principal u otra subrutina, la ejecución del programa principal se detiene temporalmente para transferir el control y ejecutar el código de la subrutina, utilizando los datos asignados a sus variables. Una vez finalizado este proceso, la subrutina devuelve el valor resultante (comportándose como una función) y el flujo del programa retoma su curso desde el punto exacto donde fue pausado. Esta técnica optimiza el desarrollo debido a que elimina la necesidad de repetir líneas de código idénticas en diferentes secciones del algoritmo, facilitando su mantenimiento y reutilización.

El concepto fue establecido por varias figuras importantes de la computación siendo el primero en 1945 el Dr. A. M. Turing. que creía que las subrutinas eran “Tablas subsidiarias” para resolver problemas repetitivos, estableció un concepto base que llamó “Pila” que se describe mediante dos operaciones llamadas BURY que generaba una pausa en la ejecución del código principal para que se generará un salto a la tabla subsidiaria que se guardaba previamente en la memoria y UNBURY que le daba fin a la lectura de la tabla subsidiaria y volvía a la última dirección del código principal justo en el momento del salto.[1]

Turing también pudo prever que una subrutina podría llamar a otra subrutina o lo que llamamos “Llamadas anidadas”, él detalló que si una tabla subsidiaria |A| llama a una tabla |B|, la dirección de retorno de |B| se "entierra" encima de la dirección de |A|. Al terminar |B|, se ejecuta un UNBURY que extrae la dirección de |B| (Regresa a |A|), y cuando |A| termina, otro UNBURY extrae la dirección de |A|, regresando finalmente al código principal.[1]

Posteriormente, las seis programadoras del ENIAC (Electronic Numerical Integrator and Computer) Kathleen Antonelli (Kay McNulty), Jean Bartik, Frances Spence, Ruth Teitelbaum, Marlyn Meltzer (Marlyn Wescoff) y Betty Holberton. Estas personas no trabajaban con lenguaje de programación ni un sistema operativo, ya que la ENIAC era una máquina electrónica digital programable mediante cableado, por lo que se vieron obligadas a descomponer ecuaciones diferenciales de las trayectorias balísticas en operaciones aritméticas individuales y lo más importante que fue la creación de subrutinas físicas para que el “Master Programmer” que era la unidad de hardware, cuando era requerido realizará saltos a los diferentes paneles que representaban las subrutinas que necesitaba, tomar ese dato y volver al centro lógico para continuar con el cálculo general.[2]

Concluyó con David Wheeler, Maurice Wilkes y Stanley Gill en 1951. Wheeler es acreditado con la invención de la subrutina cerrada, diferenciándola de la subrutina abierta (que implicaba copiar el código en cada uso). La subrutina cerrada permitía que el bloque de código residiera en una única ubicación de memoria, siendo invocado mediante un 'salto' y regresando al programa principal tras su ejecución. Esta innovación fue vital en la computadora EDSAC debido a su limitada memoria, y sentó las bases para la creación de las primeras bibliotecas de software reutilizable.[3][4]

También desarrollaron la primera biblioteca de software “The EDSAC Library” que contaba con cambios importantes que marco el concepto de las subrutinas de esos años, pues crearon el sistema “Initial Orders” que se encargaba de ajustar los datos de entrada que recibe la subrutina y finalmente desarrollaron el concepto de “Abstracción” a la programación, este concepto establece que solo es necesario conocer los datos de entrada y de salida para usar la subrutina de forma que no era necesario ser un experto en electrónica para programar.[5][6]

Elementos de la declaración de una subrutina

[editar]

Las declaraciones de subrutinas generalmente son especificadas por:

  • Un nombre único en el ámbito: nombre de la función con el que se identifica y se distingue de otras. No podrá haber otra función ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos).
  • Un tipo de dato de retorno: tipo de dato del valor que la subrutina devolverá al terminar su ejecución.
  • Una lista de parámetros: especificación del conjunto de argumentos (pueden ser cero, uno o más) que la función debe recibir para realizar su tarea.
  • El código u órdenes de procesamiento: conjunto de órdenes y sentencias que debe ejecutar la subrutina.

Ejemplos

[editar]
 PROGRAMA principal
     instrucción 1
     instrucción 2
     ...
     instrucción N
     ...
     SUBRUTINA NombreX
        .......
     FIN SUBRUTINA
     ...
 FIN PROGRAMA principal.

La siguiente función en C es la analogía al cálculo del promedio matemático. La función "Promedio" devuelve un valor decimal correspondiente a la semisuma de 2 valores enteros de entrada (A y B):

float Promedio(int A, int B){
   float r;
   r=(A+B)/2.0;
   return r;
}

Así una llamada "Promedio(3, 5)" devolverá el valor de tipo real (float) 4,0.

También se pueden escribir funciones sin parámetros, por ejemplo (también en C):

#include <stdio.h>

int DecirHola(void) {
    printf ("¡Hola, Mundo!");
    return 0;
}

Esta función, cuando sea ejecutada, imprimirá en la salida estándar el texto "¡Hola, Mundo!"

Véase también

[editar]

Referencias

[editar]
  1. 1 2 Copeland, B. Jack, ed. (2005). Alan Turing's automatic computing engine: the master codebreaker's struggle to build the modern computer. Oxford University Press. ISBN 978-0-19-856593-2.
  2. Haigh, Thomas; Priestley, Mark; Rope, Crispin (2016). ENIAC in action: making and remaking the modern computer. History of computing. The MIT Press. ISBN 978-0-262-03398-5.
  3. The Computer Museum Archive, Wheeler (1951). The Preparation of Programs for an Electronic Digital Computer. Consultado el 11 de enero de 2026.
  4. Wilkes, Maurice Vincent (1951). The Preparation of Programs for an Electronic Digital Computer: With Special Reference to the EDSAC and the Use of a Library of Subroutines (en inglés). Addison-Wesley Press. Consultado el 11 de enero de 2026.
  5. Hamblen, John W.; Wilkes, M. V.; Wheeler, D. J.; Gill, Stanley (1958-11). «The Preparation of Programs for an Electronic Digital Computer.». The American Mathematical Monthly 65 (9): 719. doi:10.2307/2308734. Consultado el 31 de mayo de 2026.
  6. Williams, Bernard O. (1986-03). «The Preparation of Programs for an Electronic Digital Computer, with Special Reference to the "EDSAC" and the Use of a Library of Subroutines . Maurice V. Wilkes , David J. Wheeler , Stanley Gill». Isis (en inglés) 77 (1): 157-157. ISSN 0021-1753. doi:10.1086/354083. Consultado el 31 de mayo de 2026.