¿Por qué se recomienda tener una línea vacía al final del archivo?


Algunas herramientas de estilo de código recomiendan esto y recuerdo haber visto algunas herramientas de línea de comandos de Unix advirtiendo sobre la falta de línea vacía.

¿Cuál es el razonamiento para tener una línea vacía extra?

Author: Petteri Hietavirta, 2010-02-18

7 answers

Muchas herramientas antiguas se comportan mal si la última línea de datos en un archivo de texto no termina con una nueva línea o combinación de retorno de carro / nueva línea. Ignoran esa línea ya que termina con ^Z (eof) en su lugar.

 129
Author: Ralph M. Rickenbach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-18 10:55:21

Aparte del hecho de que es una mejor posición del cursor cuando se mueve al final de un archivo en un editor de texto.

Tener una nueva línea al final del archivo proporciona una simple comprobación de que el archivo no ha sido truncado.

 32
Author: rsp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-18 10:56:43

Si intenta concatenar dos archivos de texto juntos, será mucho más feliz si el primero termina con un carácter de nueva línea.

 28
Author: user1809090,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-21 17:44:19

La línea vacía al final del archivo aparece para que la lectura estándar del flujo de entrada sepa cuándo terminar la lectura, generalmente devuelve EOF para indicar que ha llegado al final. La mayoría de los idiomas pueden manejar el marcador EOF. Está allí por esa razón de los viejos días, bajo DOS, el marcador de EOF era tecla F6 o Ctrl-Z, para sistemas * nix, era Ctrl-D.

La mayoría, si no todos, realmente leerán hasta el marcador EOF para que la función de la biblioteca de tiempo de ejecución de la lectura de la entrada sabrá cuándo dejar de leer más. Cuando abra la secuencia para el modo Anexar, borrará el marcador EOF y escribirá más allá de él, hasta que se llame explícitamente a un cierre en el que insertará el marcador EOF en ese punto.

Las herramientas más antiguas esperaban una línea vacía seguida de un marcador de EOF. Hoy en día, las herramientas pueden manejar la línea vacía e ignorarla.

 11
Author: t0mm13b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-01 15:06:32

También se puede hacer un argumento para diffs más limpios si se añade al archivo siguiendo el mismo razonamiento que ¿Por qué Python permite una coma final en list?

 11
Author: Mathias Bak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:25

También cuando modificas el archivo y agregas algún código al final del archivo - diff (al menos git diff en la coniguración estándar) mostrará que cambiaste la última línea, mientras que lo único que has hecho es agregar un símbolo de nueva línea. Cvs informes de menos conveniente.

 8
Author: prijutme4ty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-14 14:23:16

Algunos lenguajes definen su archivo de entrada en términos de líneas de entrada, donde cada línea de entrada es una serie de caracteres terminados por un retorno de carro. Si su gramática está así definida, entonces la última línea válida del archivo debe ser terminada por un retorno de carro también.

 4
Author: Damien_The_Unbeliever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-18 11:07:23