Articulo de referencia

Número de línea

En informática , un número de línea es un método que se utiliza para especificar una secuencia particular de caracteres en un archivo de texto . El método más común para asignar...

En informática , un número de línea es un método que se utiliza para especificar una secuencia particular de caracteres en un archivo de texto . El método más común para asignar números a las líneas consiste en asignar a cada línea un número único, comenzando con 1 para la primera línea y aumentando en 1 para cada línea sucesiva.

En el lenguaje de programación C, el número de línea de una línea de código fuente es uno mayor que el número de caracteres de nueva línea leídos o introducidos hasta ese punto. [ 1 ]

En lenguajes de programación más antiguos , como Fortran , JOSS y BASIC , los programadores también podían asignar números de línea a las instrucciones. En Fortran, no todas las instrucciones necesitaban un número de línea, y estos no tenían por qué estar en orden secuencial. La función de los números de línea era la de crear bifurcaciones y la de referencias mediante el formato de las instrucciones.

Tanto JOSS como BASIC hicieron de los números de línea un elemento obligatorio de la sintaxis . La razón principal era que la mayoría de los sistemas operativos de la época carecían de editores de texto interactivos ; dado que la interfaz del programador solía limitarse a un editor de línea , los números de línea proporcionaban un mecanismo para hacer referencia a líneas específicas del código fuente y editarlas, así como para insertar una nueva línea en un punto concreto. Los números de línea también facilitaban la distinción entre el código que se iba a introducir en el programa y los comandos de modo directo que se ejecutaban inmediatamente al ser introducidos por el usuario (los cuales no llevan números de línea).

Debido en gran medida a la prevalencia de la edición interactiva de texto en los sistemas operativos modernos , los números de línea no son una característica de la mayoría de los lenguajes de programación, incluso de los modernos Fortran y Basic. [ 2 ]

Historia

FORTRAN

En Fortran , tal como se especificó por primera vez en 1956, los números de línea se usaban para definir patrones de entrada/salida, para especificar instrucciones que debían repetirse y para bifurcaciones condicionales. Por ejemplo: [ 3 ]

DIMENSIÓN ALPHA ( 25 ), RHO ( 25 ) 1 ) FORMATO ( 5 F12 . 4 ) 2 ) LEER 1 , ALPHA , RHO , ARG SUMA = 0.0 HACER 3 I = 1 , 25 SI ( ARG - ALPHA ( I )) 4 , 3 , 3 3 ) SUMA = SUMA + ALPHA ( I ) 4 ) VALOR = 3.14159 * RHO ( I - 1 ) IMPRIMIR 1 , ARG , SUMA , VALOR  IR A 2

Al igual que el lenguaje ensamblador que lo precedió, Fortran no asumía que cada línea necesitara una etiqueta (número de línea, en este caso). Solo las instrucciones a las que se hacía referencia en otros lugares requerían un número de línea:

  • La línea 1 especifica un patrón de formato para la entrada; tanto el comando READ de la línea 2 como el comando PRINT posterior hacen referencia a esta línea.
  • El bucle DO ejecuta la línea 3.
  • La instrucción IF aritmética se ramifica a la línea 4 si el valor es negativo, a la línea 3 si es cero y nuevamente a la línea 3 si el valor es positivo.

Si bien los números de línea son secuenciales en este ejemplo, en el primer programa [Fortran] "completo pero simple" publicado, los números de línea están en la secuencia 1, 5, 30, 10, 20, 2. [ 4 ]

También se podrían asignar números de línea a variables de punto fijo (por ejemplo, ASSIGN i TO n ) para referenciarlas en instrucciones GO TO asignadas subsiguientes (por ejemplo, n,(n1,n2,...nm) ).GO TO

COBOL

En COBOL , los números de línea se especificaban en los primeros seis caracteres (el área del número de secuencia ) de las tarjetas perforadas . Esto se utilizaba originalmente para facilitar la clasificación mecánica de las tarjetas y asegurar la secuencia de código del programa tras su manipulación manual. El compilador ignoraba los números de línea.

DROGA

En 1962, DOPE (Dartmouth Oversimplified Programming Experiment) se convirtió en uno de los primeros lenguajes de programación en requerir un número de línea para cada instrucción y en utilizar un orden secuencial de números de línea. Los números de línea se especificaban como destinos para dos comandos: C (operación de comparación, una función IF aritmética) y T (operación a, una instrucción GO TO).

JOSS

En 1963, JOSS estableció de forma independiente la obligatoriedad de numerar las líneas de cada instrucción de un programa y las ordenó secuencialmente. JOSS introdujo la idea de un editor de línea de comandos único que funcionaba tanto como lenguaje interactivo como editor de programas. Los comandos que se escribían sin número de línea se ejecutaban inmediatamente, en lo que JOSS denominó "modo directo". Si a la misma línea se le anteponía un número de línea, se copiaba en el área de almacenamiento del código del programa, lo que JOSS llamó "modo indirecto".

A diferencia de FORTRAN y BASIC, JOSS requería que los números de línea fueran números de punto fijo, compuestos por dos enteros de dos dígitos separados por un punto (por ejemplo, 1.1). La parte del número de línea a la izquierda del punto se conoce como "página" o "parte", mientras que la parte a la derecha se conoce como "línea"; por ejemplo, el número de línea 10.12se refiere a la página 10, línea 12. Las bifurcaciones pueden apuntar a una página o a una línea dentro de una página. Cuando se utiliza este último formato, la combinación de página y línea se conoce como "paso".

Las páginas se utilizan para definir subrutinas , que regresan cuando la siguiente línea está en una página diferente. Por ejemplo, si una subrutina para calcular la raíz cuadrada de un número está en la página 3, se podrían tener tres líneas de código 3.1, 3.2 y 3.3, y se llamaría usando Do part 3.El código regresaría a la instrucción después de Do cuando llegue a la siguiente línea en una página diferente, por ejemplo, 4.1. No es necesario el equivalente de un RETURN al final, aunque si se requiere un retorno anticipado, Done lo logra. Ejemplo:

*Rutina para pedirle al usuario un valor positivo y repetir hasta obtener uno. 01.10 Demanda X como "Introduzca un valor positivo mayor que cero". 01.20 Hecho si X>0. 01.30 Al paso 1.1

BÁSICO

Introducido en 1964, Dartmouth BASIC adoptó números de línea obligatorios, como en JOSS, pero los convirtió en enteros, como en FORTRAN. Tal como se definió inicialmente, BASIC solo usaba números de línea para GOTO y GOSUB (ir a subrutina, luego regresar). Algunas implementaciones de Tiny BASIC admitían expresiones numéricas en lugar de constantes, mientras que las sentencias switch estaban presentes en diferentes dialectos ( ON GOTO ; ON GOSUB ; ).ON ERROR GOTO

Los números de línea rara vez se usaban en otros lugares. Una excepción era permitir que el puntero utilizado por READ (que iteraba a través de las instrucciones DATA ) se estableciera en un número de línea específico mediante RESTORE .

1 REM RESTORE PODRÍA USARSE SI UN BASIC CARECIERA DE MATRICES DE CADENAS 2 DIM M$ ( 9 ) : REM DEFINIR LONGITUD DE 9 CARACTERES 5 INPUT "MES #?" ; M : SI M < 1 O M > 12 ENTONCES 5 7 RESTORE 10 * M : LEER M$ : IMPRIMIR M$ 10 DATA "ENERY" 20 DATA "FEBRUARY" 30 DATA "MARCH" ...

En las primeras ediciones de Dartmouth BASIC, THEN solo podía ir seguido de un número de línea (para un GOTO implícito ), no, como en implementaciones posteriores, de una instrucción.

El rango de números de línea válidos variaba considerablemente de una implementación a otra, dependiendo de la representación utilizada para almacenar el equivalente binario del número de línea (uno o dos bytes; con o sin signo). Mientras que Dartmouth BASIC admitía números del 1 al 99999, la implementación típica para microcomputadoras admitía del 1 al 32767 (una palabra de 16 bits con signo).

Números de línea y estilo

En estos lenguajes , era una cuestión de estilo de programación , si no una necesidad absoluta, dejar espacios entre números de línea sucesivos; es decir, un programador usaría la secuencia (10, 20, 30,  ...) en lugar de (1, 2, 3,  ...). Esto le permitía insertar una línea de código más tarde. Por ejemplo, si se omitía una línea de código entre las líneas 20 y 30, el programador podría insertar la línea olvidada en la línea número 25. Si no se dejaban espacios en la numeración, el programador tendría que renumerar la línea 3 y todas las líneas subsiguientes para insertar la nueva línea después de la línea 2. Por supuesto, si el programador necesitaba insertar más de nueve líneas adicionales, sería necesario renumerar incluso con la numeración más dispersa. Sin embargo, esta renumeración se limitaría a renumerar solo 1 línea por cada diez líneas añadidas; Cuando el programador descubra que necesita agregar una línea entre la 29 y la 30, solo sería necesario renumerar la línea 30 y la línea 40 podría dejarse sin cambios.

Algunos lenguajes BASIC incluían el comando RENUM , que normalmente recorría el programa (o una parte específica del mismo) reasignando los números de línea en incrementos iguales. También renumeraba todas las referencias a esos números de línea para que siguieran funcionando correctamente.

En un programa extenso que contiene subrutinas , cada subrutina generalmente comienza en una línea lo suficientemente larga como para dejar espacio para la expansión del programa principal (y las subrutinas anteriores). Por ejemplo, las subrutinas podrían comenzar en las líneas 10000, 20000, 30000, etc.

Números de línea y GOTO

En lenguajes de programación "no estructurados" como BASIC , los números de línea se utilizaban para especificar los destinos de las instrucciones de bifurcación . Por ejemplo:

1 S = 0 : N = -1 2 ENTRADA "INGRESE UN NÚMERO PARA SUMAR, O 0 PARA FINALIZAR" ; I 3 S = S + I: N = N + 1 : SI I <> 0 ENTONCES IR A 2 4 IMPRIMIR "SUMA=" ; S: IMPRIMIR "PROMEDIO=" ; S / N

Las bifurcaciones al estilo GOTO pueden conducir al desarrollo de código espagueti . [ c ] Incluso en algunas versiones posteriores de BASIC que todavía exigían números de línea, el uso de GOTO controlados por número de línea se eliminó gradualmente siempre que fue posible en favor de construcciones más limpias como el bucle for y el bucle while .

Muchos lenguajes modernos (incluidos C y C++ ) incluyen una versión de la instrucción GOTO; sin embargo, en estos lenguajes el destino de un GOTO se especifica mediante una etiqueta de línea en lugar de un número de línea.

Números de línea y errores de sintaxis

Si un programador introduce un error de sintaxis en un programa, el compilador (o intérprete ) le informará que el intento de compilación (o ejecución) falló en la línea especificada. Esto simplifica enormemente la tarea del programador a la hora de encontrar el error.

El uso de números de línea para describir la ubicación de los errores sigue siendo habitual en las herramientas de programación modernas, aunque ya no es necesario especificarlos manualmente. Un programa puede simplemente contar los saltos de línea en un archivo fuente y mostrar un número de línea generado automáticamente que indica la ubicación del error. En entornos de desarrollo integrados (IDE) como Microsoft Visual Studio , Eclipse o Xcode , donde el compilador suele estar integrado con el editor de texto, el programador puede incluso hacer doble clic en un error y acceder directamente a la línea que lo contiene.

Notas

  1. Se puede insertar una línea 0 en un programa mediante unPOKE, pero no mediante la entrada normal del programa.
  2. Si bien QBASIC utiliza programación estructurada y, por lo tanto, no necesita números de línea, aún es posible ejecutar código con números de línea en QBASIC.
  3. Véase Considerado perjudicial , Programación estructurada .

Véase también

Referencias

  1. "6.10.4 Control de línea" . 30/01/2008. Archivado del original el 08/07/2011 . Consultado el 03/07/2008 .
  2. "Diferencias entre GW-BASIC y QBasic" . 12 de mayo de 2003. Consultado el 28 de junio de 2008 .
  3. Departamento de Investigación de Programación, International Business Machines Corporation (8 de abril de 1957). El sistema de codificación automática FORTRAN para el IBM 704 EDPM: Manual preliminar del operador (PDF) . págs. 6–37 . {{cite book}}: |last1=tiene nombre genérico ( ayuda )
  4. Backus, John Warner ; Beeber, RJ; Best, Sheldon F.; Goldberg, Richard ; Herrick, Harlan L.; Hughes, RA; Mitchell, LB; Nelson, Robert A.; Nutt, Roy ; Sayre, David ; Sheridan, Peter B.; Stern, Harold; Ziller, Irving (1956-10-15). Sayre, David (ed.). El sistema de codificación automática FORTRAN para el IBM 704 EDPM: Manual de referencia del programador (PDF) . Nueva York, EE. UU.: División de Ciencias Aplicadas y Departamento de Investigación de Programación, International Business Machines Corporation . pág. 46. Archivado (PDF) del original el 4 de julio de 2022. Recuperado el 4 de julio de 2022 . (2+51+1 páginas)