Mengapa disarankan memiliki baris kosong di akhir file sumber?

232

Beberapa alat gaya kode merekomendasikan ini dan saya ingat melihat beberapa alat baris perintah unix memperingatkan tentang baris kosong yang hilang.

Apa alasan untuk memiliki saluran kosong ekstra?

Petteri Hietavirta
sumber
7
Beberapa alat gagal berfungsi jika file tidak diakhiri dengan baris baru. Itu berbeda dari memiliki garis kosong di akhir (yang akan menjadi 2 baris baru).
William Pursell
2
Apakah maksud Anda baris kosong ( \n\n) atau baris baru \n?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
13
catfile pada shell dan Anda akan tahu sebabnya. Jika file Anda membuat prompt shell saya muncul di tempat lain dari yang seharusnya (di awal baris) saya mungkin akan membencimu. ;)
ThiefMaster
2
Datangi pertanyaan lama ini dan tidak bisa percaya bahwa setiap jawaban mencoba untuk membenarkan kegagalan dan kekurangan alat dan sistem lain dengan mengatakan bahwa coders modern harus menambahkan karakter yang tidak memiliki nilai dalam kode itu sendiri. Bicara tentang 5 monyet di kandang! :-D
Amos M. Carpenter
1
Lebih baik (lebih umum) menjawab ulang file teks secara umum :: stackoverflow.com/questions/729692/...
Ruben Bartelink

Jawaban:

188

Banyak alat yang lebih lama berperilaku salah jika baris terakhir data dalam file teks tidak diakhiri dengan baris baru atau carriage return / kombinasi baris baru. Mereka mengabaikan garis itu karena diakhiri dengan ^ Z (eof) sebagai gantinya.

Ralph M. Rickenbach
sumber
1
Terima kasih atas jawabannya! Adakah contoh alat populer yang mungkin memperlihatkan perilaku ini?
Nick Merrill
8
@NickM Hampir semua alat baris perintah POSIX / Unix yang mengambil input teks atau membaca file teks menggunakan akhiran baris ( \n) di akhir file. Beberapa editor teks, seperti Vim, dan beberapa kompiler (terutama C ++ dan Python) akan mengeluarkan peringatan. (Dalam kasus C ++, standar secara eksplisit mengharuskan ini.)
greyfade
5
Jadi yang Anda katakan adalah ... itu pemujaan kargo
Jaykul
Namun Anda dapat memiliki teks pada baris terakhir, pertanyaannya menyebutkan baris kosong \n\n.
jinawee
57

Jika Anda mencoba menggabungkan dua file teks bersama-sama, Anda akan jauh lebih bahagia jika yang pertama berakhir dengan karakter baris baru.

pengguna1809090
sumber
38

Terlepas dari kenyataan bahwa itu adalah posisi kursor yang lebih baik ketika Anda pindah ke akhir file dalam editor teks.

Memiliki baris baru di akhir file menyediakan pemeriksaan sederhana bahwa file tersebut belum terpotong.

rsp
sumber
221
File mungkin terpotong dan Anda bahkan tidak akan pernah tahu
Simon Nickerson
26

Argumen juga dapat dibuat untuk pembersih berbeda jika Anda menambahkan file mengikuti alasan yang sama seperti Mengapa membuntuti koma diperbolehkan dalam daftar?

Berikut ini disalin (dan sedikit dipangkas) dari sumber daya yang ditautkan:

Mengubah:

s = [
  'manny',
  'jack',
]

untuk:

s = [
  'manny',
  'jack',
  'roger',
]

hanya melibatkan perubahan satu baris dalam diff:

  s = [
    'manny',
    'jack',
+   'roger',
  ]

Ini mengalahkan perbedaan multi-garis yang lebih membingungkan ketika koma trailing dihilangkan:

  s = [
    'manny',
-   'jack'
+   'jack',
+   'roger'
  ]
Mathias Bak
sumber
Jawaban khusus tautan tidak dianggap berharga di SO. Harap salin informasi yang relevan di sini sambil mempertahankan atribusi.
isherwood
17

Baris kosong di akhir file muncul sehingga pembacaan standar dari aliran input akan tahu kapan harus menghentikan pembacaan, biasanya mengembalikan EOF untuk menunjukkan bahwa Anda telah mencapai akhir. Mayoritas bahasa dapat menangani penanda EOF. Itu ada karena alasan itu dari masa lalu, di bawah DOS, penanda EOF adalah tombol F6 atau Ctrl-Z, untuk sistem * nix, itu adalah Ctrl-D.

Sebagian besar, jika tidak semua, akan benar-benar membaca hingga penanda EOF sehingga fungsi runtime library membaca dari input akan tahu kapan harus berhenti membaca lebih jauh. Ketika Anda membuka aliran untuk mode Tambah, itu akan menghapus penanda EOF dan menulis melewatinya, sampai suatu penutupan secara eksplisit disebut di mana ia akan memasukkan penanda EOF pada titik itu.

Alat yang lebih lama mengharapkan garis kosong diikuti oleh penanda EOF. Saat ini, alat dapat menangani garis kosong dan mengabaikannya.

t0mm13b
sumber
6
^ D bukan "penanda EOF". Menekan ^ D menyebabkan shell menutup sisi tulis pipa yang dibaca oleh kelompok proses latar depan, sehingga pembacaan dari pipa itu mengembalikan EOF. Tidak ada "penanda EOF".
William Pursell
@ William Pursell Anda keliru mengaitkan * NIX dan Windows. Legacy Windows / DOS benar-benar menggunakan penanda EOF (26, 0x1a) yang tertanam biasanya di akhir sebagian besar file sebagai peninggalan untuk kompatibilitas dengan CP / M kuno (Siapa sih yang menggunakan CP / M setelah 1983?). "Menyenangkan" lainnya: \r\nalih-alih \n, panggilan DOS menggunakan campuran ASCIIZ dan ASCII $. Lebih buruk lagi, nanti pada Windows biasanya memasukkan tanda urutan byte Unicode (BOM) di awal sebagian besar file teks. "Keunikan" yang indah.
9

Juga ketika Anda memodifikasi file dan menambahkan beberapa kode di akhir file - diff (setidaknya git diff dalam konfigurasi standar) akan menunjukkan bahwa Anda mengubah baris terakhir, sementara satu-satunya hal yang telah Anda lakukan - menambahkan simbol baris baru. Jadi laporan cvs menjadi kurang nyaman.

prijutme4ty
sumber
5

Beberapa bahasa mendefinisikan file input mereka dalam hal jalur input, di mana setiap baris input adalah serangkaian karakter yang diakhiri oleh carriage return. Jika tata bahasa mereka ditentukan, maka baris terakhir file yang valid harus diakhiri juga oleh carriage return.

Damien_The_Unbeliever
sumber
3

Itu karena definisi dari apa file teks itu. Saat Anda membuat file teks baru di lingkungan unix apa pun, konten file itu adalah karakter baris baru '\ n'

Tanpa ini, file tidak benar-benar diidentifikasi sebagai file teks. Sekarang setelah kita menambahkan kode ke file teks ini, ini tentang tidak menghapus baris baru awal ini yang mendefinisikan file teks itu sendiri .

Victor Fernandes
sumber