Mengapa membuntuti spasi putih adalah masalah besar? [Tutup]

116

Trailing whitespace cukup menjadi masalah bagi programmer yang editor seperti Emacs memiliki fungsi khusus yang menyorotnya atau menyingkirkannya secara otomatis, dan banyak standar pengkodean mengharuskan Anda untuk menghilangkan semua contohnya. Saya tidak sepenuhnya yakin mengapa. Saya dapat memikirkan satu alasan praktis untuk menghindari ruang putih yang tidak perlu, dan itu adalah jika orang tidak berhati-hati untuk menghindarinya, maka mereka mungkin mengubahnya di antara komitmen, dan kemudian kita mendapatkan difs tercemar dengan garis yang tampaknya tidak berubah, hanya karena seseorang dihapus atau menambahkan spasi.

Ini sudah terdengar seperti alasan yang cukup baik untuk menghindarinya, tetapi saya ingin melihat apakah ada lebih dari itu. Jadi, mengapa mengejar spasi putih adalah masalah besar?

EpsilonVector
sumber
30
Trailing whitespace memang melakukan noise. Tidak dapat memikirkan alasan lain.
yannis
17
Sebuah baik alat diff harus dapat mengabaikan tertinggal (dan terkemuka juga, jika Anda ingin) spasi. Lagi pula, Emacs bisa melakukannya, mengapa tidak alat diff Anda?
FrustratedWithFormsDesigner
4
Menavigasi ke akhir string dengan tombol 'End' bisa berantakan dengan banyak spasi kosong.
Iarek Kovtunenko
11
Saya pikir Anda mengajukan pertanyaan dengan cara yang salah. Cara sebaliknya adalah: «apa keuntungan dari membuntuti ruang putih? ». Jawabannya menjadi sangat jelas ketika mengajukan pertanyaan yang tepat;)
deadalnix
7
Mungkin Anda harus mencoba pemrograman di Whitespace . * 8 ')
Mark Booth

Jawaban:

76

Alasan yang penting bagi saya:

  • Ketika saya menekan tombol "End", saya berharap kursor pergi ke akhir baris (tergantung editor apa yang saya gunakan dan bagaimana ini dikonfigurasi) dan saya berharap dapat mulai mengetik segera. Jika kursor sampai di sana dan saya harus menghapus 3 atau 4 karakter, itu menjengkelkan. Terutama jika tidak konsisten di seluruh file.

  • Ketika saya memiliki string literal yang menjangkau beberapa baris, mengeklik spasi putih dapat membuat string output terlihat salah saat digunakan.

Meskipun tidak sepenuhnya pemrograman, spasi putih dapat secara serius mengacaukan entri data, jika ada trailing / memimpin dalam file yang akan diuraikan dan digunakan sebagai input untuk sesuatu yang lain. Ini paling sering terjadi ketika file input yang bersih dan dihasilkan menjadi kotor oleh seseorang yang mengeditnya di Excel atau sesuatu dan kemudian mengekstrak spasi putih (dan masalah pemformatan lainnya) dapat menyusup.

FrustratedWithFormsDesigner
sumber
8
Poin 1 adalah masalah dengan editor Anda, bukan dengan spasi putih tertinggal.
Marjan Venema
33
@ MarsjanVenema: Ya, editor dapat dirancang untuk pergi ke NON-spasi putih terakhir, tapi kemudian Anda tidak akan pernah tahu tentang spasi spasi (kecuali itu ditunjukkan dengan cara lain - juga saya mungkin akan merasa aneh bahwa END tidak pergi ke end-of-line, yang saya sudah terbiasa). Yang akan menjadi masalah dengan multi-line string literal. Maka editor harus tahu bahwa dalam string multi-line literal, END harus pergi ke karakter terakhir, termasuk spasi. Editor yang saya gunakan tidak sepintar itu.
FrustratedWithFormsDesigner
2
Saya akan menambahkan seleksi dengan mouse sulit dilakukan tanpa memilih ruang ekstra dan itu bisa menjadi masalah jika itu untuk memotong pasta. Atau itu menghasilkan suara ketika melakukan (akhirnya confilcts!) Tanpa biaya. Bukan masalah besar, tapi banyak gangguan kecil. Ini memberi perasaan bahwa dev sebelumnya malas dan berharap Anda pergi dalam kekacauan.
deadalnix
1
@deadalnix: tentu saja, itu sebabnya Anda memerlukan editor yang baik dengan opsi yang sesuai dengan preferensi kebanyakan orang. Dan karena itu poin 1 adalah masalah dengan editor dan bukan spasi putih.
Marjan Venema
1
Poin 1 justru mengapa saya lebih suka memiliki gaya khusus spasi putih: baris kosong diindentasi dengan kode yang mereka pisahkan. Ini memungkinkan kode baru untuk segera dimasukkan tanpa harus masuk.
Xiong Chiamiov
29

Saya benar-benar membenci spasi putih, tapi alasan pastinya agak kabur.

Saya kira asal dari perasaan itu bukan dalam pemrograman, tetapi di bidang penerbitan desktop. Pernahkah Anda mendapatkan dokumen yang diketik oleh orang lain yang perlu diketik dalam publikasi? Dalam semua publikasi modern, terutama ketika menggunakan kolom, sudah lazimnya kalimat saling mengikuti secara berurutan dalam satu paragraf, bukan memulai baris baru untuk setiap kalimat. Nah, ketika ada spasi spasi tambahan, dibutuhkan lebih banyak upaya untuk memperbaikinya (banyak pencarian dan ganti tindakan yang menghilangkan spasi ganda, dll ...).

Alasan lain (dalam pemrograman), bukan alasan yang bagus, saya tahu, tetapi mereka mengganggu jiwa bawah sadar saya sedemikian kuatnya sehingga mereka memaksa saya untuk menghilangkannya:

  • Dibutuhkan lebih banyak ruang penyimpanan daripada yang diperlukan
  • Parser harus melewati karakter tambahan tanpa alasan yang baik saat kompilasi
  • Beberapa editor mungkin menambahkan baris kosong tambahan ketika WordWrap aktif dan ruang tambahan tidak cocok

Ya ya saya tahu! Saya tahu, ini adalah alasan sampah. Saya bukan perfeksionis, tapi ... yah mungkin saya?

Alasan terakhir yang bisa saya pikirkan adalah pergerakan kursor yang tidak konsisten. Rasanya seperti kursor menggantung di udara tipis di ujung garis, setiap langkah ke kanan dapat menyebabkannya jatuh atau melayang lebih jauh ke tingkat yang tidak diketahui, itu hanya terasa goyah (seperti blok yang tidak terlihat atau menghilang yang Super Mario digunakan untuk melompat).

Mungkin saya bisa didiagnosis menderita trailspacefobia?

Louis Somers
sumber
Bukan bidang saya, tapi itu terasa aneh bagi saya ... jenis sistem pengaturan huruf apa yang Anda gunakan di sana dalam penerbitan desktop, yang tidak mengabaikan trailing / banyak spasi secara default ? Saya pikir cara LaTeX dan sebagian besar bahasa pemrograman melakukannya adalah standar di mana-mana, kecuali dalam sampah WYSIWYG tingkat konsumen.
leftaroundtentang
Adobe InDesign (apakah itu juga termasuk dalam sampah WYSIWYG tingkat konsumen?). Itu akan mengabaikan spasi tambahan, ya, tapi ganti semua umpan baris dengan spasi dalam paragraf dan Anda akan berakhir dengan spasi ganda (yang tidak diabaikan), maka diperlukan penggantian tambahan untuk menghilangkannya.
Louis Somers
"Desktop publishing" bukan sesuatu yang Anda lakukan dengan "sistem penyusunan huruf".
rakslice
22

Banyak dari jawaban ini hampir menyentuh alasan mengapa hal itu buruk bagi saya, tetapi pada dasarnya: Ini "merusak" editor teks. Pengalaman saya dengan vim.

Vim dirancang sedemikian rupa sehingga tindakan umum memetakan ke huruf begitu bersih sehingga Anda bahkan tidak perlu memikirkan kombinasi huruf atau tombol apa yang akan dipukul. Berbagai tombol cepat memungkinkan kursor untuk melompat-lompat di sekitar teks begitu cepat sehingga hanya perlu beberapa penekanan tombol untuk mendapatkannya di mana pun Anda inginkan. Bahkan hal-hal seperti melipat blok kode cepat, karena Anda dapat menekan END atau $ untuk melompat ke akhir baris, di mana kursor harus tumpang tindih {atau} atau (atau) atau sesuatu - tidak perlu memutus aliran pemikiran Anda untuk dapatkan ide di layar.

Tetapi kemudian muncul beberapa spasi putih, dan gerakan kursor tidak lagi dapat diprediksi. Proses mengetik Anda sedang terganggu karena sesuatu yang tidak dapat Anda lihat memengaruhi ke mana kursor pergi, jadi Anda harus mematahkan pemikiran Anda untuk mengirimnya ke tempat yang seharusnya.

Pernah perhatikan betapa jengkelnya orang ketika mereka benar-benar fokus pada suatu tugas dan seseorang menyela mereka? Ya, menemukan spasi spasi ketika itu paling tidak diharapkan persis seperti itu.

Sebagai seorang sidenote, saya juga memperhatikan bahwa orang-orang yang tidak peduli dengan trailing space putih adalah mereka yang menggunakan mouse untuk navigasi, dan cenderung menjadi juru ketik yang lebih lambat karena itu ...

Izkata
sumber
2
Sebagai sidenote, kecepatan mengetik tidak ada hubungannya dengan apakah Anda menggunakan mouse untuk navigasi atau tidak. Beberapa navigasi sangat cocok untuk mouse. ; p
Steven Jeuris
2
Jika Anda menggunakan vim, Anda dapat dengan cepat menghapus semua spasi spasi tambahan:%s/ *$//
Giorgio
1
@Giorgio Saya tahu, tapi saya tidak bisa melakukannya kapan saja karena ini dianggap sebagai perubahan dalam kontrol versi
Izkata
@izkata: Benar. Saya memformat ulang file yang harus saya ubah sebelum memeriksanya, tetapi ini adalah perjuangan yang hilang jika pengembang lain terus memeriksa file dengan spasi kosong.
Giorgio
17

Anehnya, jawaban yang paling jelas tidak ada: tertinggal spasi dapat dan akan menghasilkan bug yang sulit ditemukan.

Situasi yang paling jelas adalah string multiline. Python, JavaScript, dan Bash adalah beberapa contoh bahasa yang dapat dipengaruhi oleh ini:

print("Hello\·
····World")

menghasilkan:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

yang entah bagaimana samar dan sulit dipecahkan jika editor tidak dikonfigurasi untuk menampilkan karakter spasi putih.

Meskipun highlight sintaksis dapat membantu menghindari kasus-kasus seperti itu, lebih mudah untuk tidak memiliki masalah di tempat pertama dengan tidak membiarkan spasi kosong di akhir baris. Inilah sebabnya mengapa beberapa pemeriksa gaya akan memunculkan peringatan ketika menemukan spasi tambahan, dan beberapa editor akan memotongnya secara otomatis.

masukkan deskripsi gambar di sini

Illustration: syntax highlight dapat membantu menghindari tertinggal spasi dalam situasi di mana ia dapat menyebabkan bug, tetapi jangan hanya mengandalkan itu.

Konteks lain, yang disebutkan secara singkat dalam jawaban sebelumnya , adalah data yang disimpan dalam file.

Sebagai contoh, file CSV yang berisi trailing whitespace dapat menyebabkan inkonsistensi data yang juga sangat sulit untuk dideteksi: parser yang memenuhi standar akan memangkas whitespace (standar menunjukkan bahwa memimpin atau trailing whitespace tidak relevan, kecuali dibatasi dengan tanda kutip ganda), tetapi beberapa parser mungkin berperilaku tidak benar dan menjaga spasi putih sebagai bagian dari nilai.

Format khusus lainnya mungkin secara khusus menganggap spasi putih adalah bagian dari nilai, yang mengarah ke situasi yang konsisten tetapi masih sulit untuk di-debug.

Arseni Mourzenko
sumber
14

Saya baru-baru ini menghabiskan satu hari mencari bug yang ternyata merupakan spasi spasi data yang tidak terduga.

ddyer
sumber
13
Saya pikir itu adalah bug; pemrosesan kode input yang dihasilkan manusia harus membuang spasi spasi, dan spasi spasi sering juga harus dibuang.
kevin cline
@kevincline - Setidaknya harus. Jika itu tidak terlihat di layar atau di cetakan, saya tidak ingin memikirkannya.
Benteng
6
Karena Anda menghabiskan satu hari mencari bug, tertinggal spasi putih adalah masalah besar? Harap edit jawaban Anda untuk lebih umum dari itu. Tambahkan beberapa latar belakang, argumentasi, ... Saya pribadi tidak pernah mengalami masalah spasi putih, tapi saya tidak menggunakannya sebagai kesimpulan bahwa mereka juga tidak masalah.
Steven Jeuris
2
@Steven Trailing whitespace menyebabkan bug yang sulit dilacak. Sepertinya jawaban yang bagus untuk saya. Anda dapat membayangkan bagaimana beberapa kode parsing data dapat rusak dalam situasi itu.
Will Sheppard
Saya menghapus spasi putih di akhir data dan sekarang tes gagal. Anda bertanggung jawab untuk itu. Siapa namamu? Di mana saya harus mengirim tagihan?
Thomas Weller
8

Ketika saya memilih kode sumber program untuk menyalin dan menempelnya (atau menghapusnya), saya merasa sedikit menjengkelkan melihat semua ruang putih ekstra yang tidak beraturan pada akhir baris: karena saya harus membaca kode ketika saya memilihnya , ruang putih yang tertinggal adalah suara yang tidak diperlukan. Contoh (titik mewakili spasi putih):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Contoh ini buatan, tetapi saya telah melihat banyak kode yang terlihat seperti ini.

Giorgio
sumber
7

Selain masalah yang jelas itu rusak parsing dalam kasus-kasus tertentu? Seperti yang dicatat poster lain, poster itu dapat menyebabkan kesalahan yang terselubung dan terselubung. Spasi tidak selalu tidak signifikan. Dalam beberapa kasus, trailing spasi putih dapat secara signifikan mengubah arti dari baris kode atau data.

Dalam kebanyakan kasus spasi putih ada untuk memformat kode untuk pembaca manusia. Trailing whitespace dapat mengindikasikan beberapa hal termasuk:

  • Pernyataan tidak lengkap;
  • Komentar yang hilang;
  • Suntingan yang salah; atau
  • Pengeditan ceroboh.

Dua di antaranya dapat menyebabkan kesalahan fungsi, dan yang lain membuatnya lebih sulit untuk memahami kode.

BillThor
sumber
4

Ada bahasa pemrograman yang sensitif terhadap spasi putih end-line. Misalnya, skrip TCL akan memberikan kesalahan jika ada spasi kosong di akhir baris.


sumber