Vide nouvelle ligne à la fin des fichiers source java

dans mon projet actuel, nous insérons toujours une nouvelle ligne vide à la fin des fichiers source java. Nous l'appliquons également avec CheckStyle (avec le niveau d'erreur).

je cherchais ce sujet depuis longtemps, mais malheureusement je ne trouve aucune raison convaincante pour cela. Il semble que d'autres développeurs sont assez indifférents à ce sujet parce qu'ils viennent de vérifier une case à cocher dans le formatter eclipse et il est fait automatiquement. Mais je ne sais toujours pas pourquoi il est nécessaire et pourquoi est-il peut-être important). Donc ma question Est:

Pourquoi les lignes vides à la fin des fichiers source Java besoin? Est-ce un besoin actuel ou un vestige du passé et indésirable dans les bases de code actuelles?

45
demandé sur Cœur 2011-01-15 18:16:27

9 réponses

je pense qu'ils essayent de s'assurer que chaque fichier se termine avec un caractère de fin de ligne. C'est différent de finir avec une ligne blanche, A. K. A. newline vide.

Edit: as @Easy Angel succinctement clarifié dans les commentaires: newline = "\n "et ligne blanche =" \n\n "

je pense que soit:

  1. votre piste est soit de mandater que chaque fichier se termine par une nouvelle ligne personnage, mais son être interprété comme exigeant que chaque à la fin du fichier avec une ligne vide (c'est à dire une ligne vide qui se termine par un saut de ligne), ou encore

  2. ils essaient de s'assurer que chaque fichier se termine avec un caractère newline en mandatant réellement chaque fin de fichier avec une ligne blanche (A. K. A. ligne vide qui se termine par une nouvelle ligne), assurant ainsi les fichiers se termine avec au moins une nouvelle ligne (et peut - être redondant nouvelle ligne supplémentaire-overkill?).

à moins que l'éditeur ne montre effectivement des symboles newline, il n'est pas toujours clair dans certains éditeurs qu'un fichier:

  1. N'a PAS de FIN un retour à la ligne,
  2. EXTRÉMITÉS avec un seul suiveur de ligne, ou
  3. EXTRÉMITÉS avec un vide de ligne, c'est à dire 2 de fuite des retours à la ligne

je pensez que la plupart des éditeurs de code source modernes insèrent une nouvelle ligne traînante. Cependant, lorsque j'utilisais des éditeurs plus anciens et plus généraux, , j'essayais toujours de m'assurer que mes fichiers de code source (et les fichiers texte en général) se terminaient toujours par une nouvelle ligne de départ (qui se lisait parfois comme une ligne blanche/une ligne vide en fonction de l'éditeur que j'utilisais) parce que:

  1. lors de l'utilisation de cat pour afficher le fichier sur la ligne de commande, si le fichier n'est pas suivi newline, la sortie suivante (comme l'invite shell ou un délimiteur visuel qu'un script peut afficher entre les fichiers) finirait par apparaître juste après le dernier caractère non-newline plutôt que de commencer sur une nouvelle ligne. En général, la nouvelle ligne arrière rend les fichiers plus faciles à utiliser et à script.

  2. je crois que certains éditeurs (Je ne me souviens pas de détails) inséreraient automatiquement une nouvelle ligne de fin si le fichier de texte en manquait une. Cela le ferait apparaître comme le fichier a été modifié. Il serait déroutant si vous avez un tas de fichiers ouverts dans différentes fenêtres et puis aller à fermer tous les - l'éditeur vous invite à enregistrer, mais vous ne savez pas si vous avez fait "de véritables changements" au fichier ou son juste newline auto-insérée.

  3. certains outils comme diff et certains compilateurs se plaindront d'une nouvelle ligne de fuite manquante. C'est plus de bruit que les utilisateurs et les outils peuvent avoir à traiter avec.


modifier:

à propos des éditeurs qui ajoutent des lignes et qui ne peuvent pas voir s'il y a une ligne à la fin du fichier, je viens de tester Vim, Eclipse, et Emacs (sur mon système Windows avec Cygwin): j'ai ouvert un nouveau fichier, j'ai tapé 'h' e '' l '' 'o' et j'ai sauvegardé sans appuyer sur [ENTER]. J'ai examiné chaque dossier avec od -c -t x1 .

  1. Vim did ajouter une nouvelle ligne.
  2. Emacs a ajouter un point de saut de ligne.
  3. Eclipse n'a PAS ajouter un point de saut de ligne.

Mais

  1. Vim n'a PAS permettez-moi de curseur vers le bas pour une ligne vide sous "bonjour".
  2. Emacs a permettez-moi de curseur vers le bas pour une ligne vide sous "bonjour".
  3. Eclipse n'a PAS permettez-moi de curseur vers le bas pour une ligne vide sous "bonjour".

interprete as you like.


ma pratique personnelle est d'essayer de s'assurer que les fichiers texte se terminent par une nouvelle ligne de fin de texte. Je sens qu'il y a la la moins surprise pour les personnes et les outils avec ce est le cas. Je ne traiterais pas les fichiers source différents des fichiers texte à cet égard.

Google tourne ce :

qui, à partir de cette édition, montre des hits qui parlent d'avertissements au sujet d'une nouvelle ligne de départ manquante provenant de compilateurs C, svn (à cause de diff), diff, etc. Je pense qu'il y a une attente générale que les fichiers texte (fichiers source inclus) se terminent par un newline de queue et moins surprenant (et moins bruyant) quand ils ont tendance à être là.

enfin ce est intéressant:

assainir les fichiers sans laisser de trace newline

Les fichiers texte doivent avoir toutes leurs lignes terminées par des caractères newline (ie, \n). Ceci est indiqué par POSIX, qui dit qu'un fichier texte est

un fichier qui contient des caractères organisés en zéro ou plus de lignes.

Une ligne, à son tour, est défini comme

* Une séquence de zéro ou plus non - caractères plus un caractère terminal.


cependant , tout ce qui a été dit, c'est juste ma pratique personnelle. Je suis heureux de partager mon opinion à quiconque demande, mais je ne foist cela sur personne. Je ne pensez pas que c'est quelque chose qui mérite d'être mandaté, comme je dis ici :

alors que je suis un dont tout pour la cohérence, je suis aussi contre micromanager chaque peu de style. Le fait d'avoir une énorme liste de conventions de codage, en particulier lorsque certaines d'entre elles semblent arbitraires, fait partie de ce qui décourage les gens de les suivre. Je pense que les lignes directrices en matière de codage devraient être rationalisées afin d'adopter les pratiques les plus utiles pour améliorer les années 90. Combien est amélioration de la lisibilité, de la maintenabilité, de la performance, etc. en imposant cette pratique?

30
répondu Bert F 2017-05-23 11:54:51

Voici une bonne raison pour avoir la ligne supplémentaire-rupture à la fin:

si vous avez un fichier sans line-break À la fin, la prochaine fois que le fichier est édité pour ajouter une autre ligne, la plupart des outils de fusion penseront que la ligne existante a changé (je suis sûr à 90% que SVN le fait aussi).

Dans l'exemple ci-dessous, la ligne contenant "dernière ligne avant de modifier" n'a pas le saut de ligne. Si nous essayons d'ajouter une nouvelle ligne "last line after edit", comme nous pouvons voir les deux lignes 5 et 6 sont marqués comme changés, mais le contenu réel de la ligne 5 dans les deux versions sont les mêmes.

Without line-break before EOF

si tout le monde suit votre suggestion de chef de projet, alors ce serait le résultat (seule la ligne 6 diffère du fichier original). Cela évite également les malentendus pendant les fusions.

With line-break before EOF

bien que cela ne ressemble pas à une grosse affaire, disons qu'un développeur (A) destiné à modifier le contenu de la dernière ligne et un autre développeur (B) ajout d'une nouvelle ligne. Si vous n'utilisez pas line-break avant EOF, alors vous avez un conflit de fusion parce que le développeur B a été forcé d'éditer aussi l'ancienne dernière ligne pour ajouter une line-break. Et... qui aime les conflits CVS/SVN?

22
répondu L. Holanda 2013-01-31 23:36:33

regarder cette SORTE de question. .

La réponse sans vergogne volé Ralph Rickenbach:

beaucoup d'anciens outils se comportent mal si le dernier ligne de données dans un fichier texte n'est pas terminé par une nouvelle ligne ou un chariot combinaison retour / nouvelle ligne. Ils ignorez cette ligne car elle est terminée avec ^Z (eof) à la place.

donc je pense que c'est surtout un fantôme du passé. Malheureusement, ces fantômes peuvent vous mordre la queue si vous n'avez pas correctement les exorciser. (Est-ce que votre serveur de compilation est ancien et utilise des scripts shell plus anciens pour les résumés et autres choses).

7
répondu extraneon 2017-05-23 11:54:51

essayer de couper/coller le fichier entier. Quelque chose de bug dans checkstyle ou eclipse : )

2
répondu Marcell 2011-02-16 15:35:59

parfois, votre compilateur ne l'analyse pas correctement:

Error: Reached end of file while parsing

1
répondu Leo Izen 2011-01-15 16:42:40

mis à part les raisons valables déjà mentionnées pour avoir un caractère newline (problèmes possibles avec des outils plus anciens et diff), voici une autre façon de le regarder:

pourquoi cas particulier la dernière ligne par pas ajouter un caractère newline lorsque chaque autre ligne dans le fichier a un?

1
répondu friederbluemle 2013-02-21 22:58:01

C'est juste un style de codage. Ne pas leur faire du mal ou quoi que ce soit. Je ne voudrais pas que cela vous dérange, il semble que ce soit votre préférence des équipes à inclure et ligne vide. Il n'est pas vraiment un bon argument contre d'autres que pourquoi personne ne s'en soucie assez pour réellement ajouter à checkstyle?

0
répondu jzd 2011-01-15 15:23:49

je n'ai jamais entendu parler d'une telle exigence.

en fait, je viens de confirmer qu'un programme Java s'exécute sans aucune erreur ou avertissement de compilateur/exécution quand il n'y a pas de ligne blanche à la fin du fichier.

ceci, comme certains commentateurs l'ont dit, doit être une question de style de codage. Malheureusement, je ne peux pas suggérer pourquoi il peut être important qu'il y ait une ligne vide à la fin d'un fichier en Java. En fait, ça me semble totalement inutile.

0
répondu chrisbunney 2011-01-15 15:27:30

nous avons dû faire cela pour un code C++ car le compilateur a généré un avertissement à ce sujet, et nous avions une politique "pas d'erreur ou d'Avertissements". Peut-être que le problème est ailleurs... avez-vous un outil de comparaison ont se détraque ou un outil de fusion qui ne peut pas gérer?

ce n'est pas grand chose.

0
répondu James 2011-01-15 15:50:47