¿Por qué los programadores usan la indexación basada en una para los números de línea en el código fuente? [duplicar]

6

¿Por qué no aparece la línea superior en un archivo de código fuente etiquetado como número de línea 0?

es decir, en un archivo fuente de 10 líneas de longitud, esperaría que los números de línea fueran 0-9, ¡pero no lo son! Ahora, grep , awk , sed , etc., parecen ser todos de 1, así que supongo que es una convención establecida por una buena razón.

Recientemente, se me ocurrió que, para casi todas las otras estructuras con las que un programador tiene que lidiar en su trabajo diario, la convención es contar desde 0, y un archivo de origen es tan parecido a una lista de líneas como a la línea es como una lista de caracteres (una lista de caracteres de afaik es invariablemente 0 indexada). ¡Tuve que abrir mi editor de texto y comprobar que la línea superior de un archivo estaba etiquetada como la línea número 1!

Me preguntaba si hay una buena razón para esto o si es simplemente una convención histórica desafortunada.

    
pregunta wim 20.09.2011 - 08:51

5 respuestas

7

Las tarjetas perforadas comenzaron en la línea 1:

La tradición se atascó incluso cuando dejamos de usar tarjetas perforadas. Y, por supuesto, los primeros idiomas como FORTRAN, COBOL y ALGOL utilizaban la indexación basada en 1.

    
respondido por el MSalters 20.09.2011 - 13:19
46
  • La indexación basada en 0 es para equipos no humanos
  • los números de línea son para personas no para computadoras
  • todos los humanos no son programadores

Los números de línea basados en 1 facilitan la lectura un poco, de lo contrario, cada vez que viera un mensaje de error con un número de línea, tendría que recordar reducirlo en uno para llegar a la línea real que causó el error. - Y eso impide la legibilidad.

También line 1 lee mejor que line 0 , porque otras personas (personas que pueden no ser técnicas) pueden tener que leer su código.

    
respondido por el treecoder 20.09.2011 - 08:59
10
  

para casi todas las otras estructuras con las que un programador tiene que lidiar en su trabajo diario, la convención es contar desde 0

Esto es específico del idioma, y AFAIK solo prevalece en C y sus sucesores . La indexación de AFAIR se basa en 1 al menos en la familia Modula y BASIC de Pascal / , y posiblemente también en lenguajes funcionales (que de todos modos no utilizan la indexación, sino iteradores o foreach etc.).

En C, hizo que la aritmética de matriz / puntero fuera conveniente. Sin embargo, no creo que nadie pueda llamarlo intuitivo ; creo que nos llevó algo de tiempo acostumbrarnos. Es, como señaló @greengit, un concepto a nivel de hardware, o más bien un detalle de implementación. Solo los programadores (C et al) necesitan entender y usar la indexación basada en 0, pero tratan de explicárselo a un lego :-)

Cuando se trata de líneas de archivo, rara vez se hace aritmética de punteros: un archivo de líneas de texto es simplemente un nivel más alto de abstracción. Y más aún, ya que los archivos de texto son utilizados por muchas personas que no son programadores de C, solo usuarios "simples". Hacer su vida más complicada al obligarlos a aprender un detalle de implementación de bajo nivel sería totalmente contraproducente.

Y una cosa más importante: los archivos de texto (y antes de ellos, las tarjetas perforadas) han existido durante décadas antes de que C llegara a existir , por lo que creo que para cuando se creó C, contando sus líneas / filas de 1 ya era una convención bien establecida.

    
respondido por el Péter Török 20.09.2011 - 09:00
5

He programado en Basic. Allí, los números normalmente serían 10, 20, 30. Puede agregar líneas adicionales como 15 y luego usar "renum" para hacer 10, 20, 30, 40. Y estos números fueron importantes ya que usó "goto 15".

Por lo tanto, las líneas no siempre se han numerado como 1,2,3

    
respondido por el Carra 20.09.2011 - 08:56
1

Lo "natural" que se debe hacer es el conteo basado en 1, como hacemos con los números de línea. La mayoría de las entidades de la vida real que contamos en serie comienzan en 1: líneas de autobuses, posiciones de gráficos emergentes, autopistas, vuelos, y ninguna de ellas tiene el número 0.

0-based es la excepción, no la regla, pero hay algunas muy buenas razones técnicas por las que las usamos, la más importante es que hace que la aritmética de punteros funcione de forma natural, especialmente en lenguajes de bajo nivel como C ( a[3] significa 'tomar las celdas de la dirección ay del paso 3', es decir, *(a + 3) ).

    
respondido por el tdammers 20.09.2011 - 09:29

Lea otras preguntas en las etiquetas