Mengapa beberapa bahasa merekomendasikan penggunaan spasi daripada tab? [Tutup]

10

Mungkin saya sendirian dalam hal ini, tetapi beberapa hal mengganggu saya seperti orang yang indentasi menggunakan spasi daripada tab. Bagaimana cara mengetik SpaceSpaceSpaceSpacelebih mudah dan lebih intuitif daripada mengetik Tab? Tentu, lebar tab adalah variabel, tapi ini jauh lebih menunjukkan ruang lekukan daripada spasi. Hal yang sama berlaku untuk backspacing; backspace sekali atau empat kali?

Mengapa bahasa seperti Python merekomendasikan penggunaan spasi di atas tab?

Naftuli Kay
sumber
24
Anda dapat mengonfigurasi sebagian besar editor untuk menyisipkan spasi alih-alih tab saat Anda menekan tab. Jika Anda tidak dapat mengonfigurasi itu di editor favorit Anda, Anda memerlukan editor yang lebih baik.
Adam Lear
Satu hal, banyak editor dapat diatur untuk memasukkan 4-8 spasi ketika 'tab' ditekan, jadi itu hanya satu tombol tekan seperti tab.
Echo mengatakan Reinstate Monica
2
Masih belum menjawab pertanyaan saya. Mengapa spasi bukan tab? Tentu, Anda dapat mengonfigurasi editor untuk menyisipkan spasi, bukan tab, tetapi Anda juga bisa memasukkan tab dengan spasi. Pertanyaannya adalah mengapa Anda ingin melakukan ini? Apa manfaat yang mungkin diperoleh?
Naftuli Kay
4
@Tk Spaces adalah tab yang ambigu dapat diubah
Martin Beckett
3
@TKKocheran, karena tab melakukan hal-hal funky pada output Anda ketika Anda secara tidak sengaja memasukkannya ke dalam string.
zzzzBov

Jawaban:

15

Konsistensi, terutama.

Juga, sesuatu yang kadang muncul yang sebenarnya menggunakan spasi putih - seperti Python: Katakan padaku, apa yang akan terjadi jika saya menjalankan cuplikan kode berikut?

def foo():
    print "a"
    print "b"

Jawaban: Anda akan mendapatkan IndentationError, karena dua pernyataan cetak itu tidak berlekuk pada level yang sama - dan karenanya bukan bagian dari blok kode yang sama. (Yang pertama menggunakan tab, yang kedua semua spasi)

Lalu ada kasus-kasus yang membuat frustasi ketika satu editor pengembang memiliki tab yang diatur ke 8 spasi, dan yang lain mengaturnya menjadi 4 dan seseorang menggunakan 5 untuk beberapa alasan aneh ... Ini mungkin terlihat sangat normal pada satu workstation, tetapi kemudian ketika itu check in ke SVN dan pembaruan orang lain, mereka akan melihat kekacauan yang mengerikan, mengerikan.

Jadi itu adalah dua alasan bagus untuk selalu konsisten, apakah itu spasi atau tab.

Namun, spasi memungkinkan kontrol yang jauh lebih besar atas lekukan daripada tab, dan tidak memerlukan konfigurasi khusus di editor agar dapat bekerja. (Meskipun dapat dibuat lebih mudah - misalnya, dalam vim, cukup gunakan set expandtabuntuk menyisipkan spasi setiap kali Anda menekan tab)

EDIT: Dan cukup mengejutkan, situs ini tampaknya telah menormalkan tab saya menjadi spasi sehingga browser dapat menampilkannya dengan benar. Klik "edit" untuk melihat aslinya, tab disertakan;)

Izkata
sumber
5
Masalah Anda dengan tab (terutama, kekacauan SVN yang mengerikan) hanya terjadi jika Anda menggunakan opsi tab-to-space di editor Anda. Jika Anda dan tim Anda setuju untuk menonaktifkan opsi tab-to-space, maka tab akan selalu menjadi tab dalam tampilan apa pun: maka itu hanyalah pilihan seberapa lebar Anda ingin menampilkannya di editor Anda.
HorusKol
@HorusKol Tidak, kekacauan yang mengerikan ini adalah karena spasi dan tab menjadi tercampur. Saya kira saya tidak membuatnya cukup jelas (lihat satu-satunya kalimat setelah baris "horrid, horrid"). Jadi spasi dibuat untuk menyelaraskan dengan tab saat mereka disetel menjadi 4-ruang setara, tetapi kemudian ketika orang lain melihatnya (apakah tab-ke-spasi diatur), mereka mendapatkan berantakan.
Izkata
4
Saya mengerti - yah, Anda perlu menetapkan pedoman untuk tim Anda - baik secara konsisten menggunakan spasi ATAU tab ... apa pun itu, tab-ke-spasi adalah ide yang buruk;)
HorusKol
21
Inilah mengapa saya menganggap ide bahasa yang mengandung ruang putih sebagai cacat desain. Hal-hal yang tidak dapat Anda lihat tidak boleh merusak kode Anda.
Paul Nathan
Sebagai catatan, saya setuju dengan @PaulNathan
Izkata
11

Ini adalah diskusi yang bagus tentang indentasi dan spasi putih dengan Python; dari artikel:

[I] t bisa merupakan ide yang baik untuk menghindari tab secara keseluruhan, karena semantik tab tidak terdefinisi dengan baik di dunia komputer, dan mereka dapat ditampilkan sepenuhnya berbeda pada berbagai jenis sistem dan editor. Juga, tab sering dihancurkan atau salah dikonversi selama operasi salin & tempel, atau ketika sepotong kode sumber dimasukkan ke halaman web atau jenis kode markup lainnya.

Mengenai argumen Anda tentang menekan bilah spasi atau tombol spasi mundur 2 atau lebih kali, karena sebagian besar editor kode sumber akan menyisipkan sejumlah ruang yang dapat dikonfigurasi dengan satu kali penekanan tombol tab, dan sama-sama tidak membuat lekukan, tidak ada lagi tombol yang ditekan saat menggunakan spasi untuk lekukan.

Untuk saya sendiri, saya lebih suka spasi karena kode selalu ditampilkan dengan jumlah indentasi yang sama, apakah saya melihatnya dalam IDE, atau less, atau Notepad; yaitu ruang lebih portabel.

Mike Partridge
sumber
3
re: "apakah saya melihatnya dalam IDE, atau kurang, atau Notepad; yaitu spasi lebih portabel" - ini adalah argumen terbaik untuk spasi yang pernah saya dengar. Saya sendiri seorang "tab", tetapi kadang-kadang tidak suka melihat kode tab-spasi yang diberikan dengan cara yang tidak terduga.
Aerik
2

Dalam lekukan Python mengontrol aliran program dan sebagainya sangat penting.
Jika Anda mengambil kode yang diformat dengan tab dan menyalinnya sehingga tab diubah atau hilang, struktur kode dihancurkan. Spasi selalu spasi = jauh lebih aman.

Jika keausan pada bilah ruang membuat Anda khawatir, editor Anda mungkin dapat diatur untuk mengonversi tab menjadi spasi secara otomatis.

Martin Beckett
sumber
Saya lebih peduli dengan waktu yang dihabiskan untuk mengetik ruang atau backspace empat kali versus satu keystroke untuk melakukan keduanya.
Naftuli Kay
Ya, tapi Python aneh seperti itu. Saya tidak pernah menemukan hal lain yang peduli tentang ruang.
Aerik
@TKKocheran Oh, itu urusanmu yang sebenarnya? Saya tidak tahu bagaimana mereka melakukannya, tetapi vim di tempat kerja saya sudah diatur sehingga backspace kembali ke tabstop terakhir, lebih dari beberapa spasi, benar-benar transparan
Izkata
Bisakah Anda mencampakkan .vimrcsaya :)
Naftuli Kay
1
@TKKocheran Menemukannya - hanya saja set softtabstop=4, dan baik TAB maupun BACKSPACE akan menggunakan 4 spasi sebagai tab. (Ya, untuk setiap tabstop, perlakukan lebar sebagai 4 spasi)
Izkata
2

Spasi harus selalu digunakan, karena tab saja tidak cukup fleksibel untuk banyak gaya, dan pencampuran tab dan spasi (hampir) selalu menghasilkan kekacauan mutlak.

Untuk contoh satu gaya yang umumnya membutuhkan ruang, pertimbangkan sesuatu seperti:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

Kecuali Anda bersedia untuk menamai ulang semua fungsi Anda menjadi kelipatan tepat dari ukuran tab (minus satu untuk tanda kurung) tab saja tidak akan melakukan ini.

Mengenai pencampuran tab dan spasi, Anda hampir segera mengalami masalah serius: tab tidak secara konsisten diperluas dengan cara yang sama. Beberapa perangkat lunak memperlakukan tab sebagai setara dengan jumlah ruang tertentu. Perangkat lunak lain akan memperluas modulo tab ke sejumlah spasi tertentu - mis. Item setelah tab akan selalu dimulai dari nomor kolom yang merupakan kelipatan dari (katakanlah) 8.

Bahkan jika Anda dapat memastikan agar spasi tidak tercampur dengan tab Anda, Anda masih memiliki masalah: tab juga bermain buruk dengan font dengan lebar variabel. Masalah ini muncul ketika (misalnya) Anda ingin menyelaraskan komentar tertinggal:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

Saat mereka berdiri sekarang, mereka semua berbaris dengan sempurna. Dilihat dengan font lebar variabel, bagaimanapun, semuanya menjadi jelek. Dengan spasi, komentar mungkin (sering akan) sedikit tidak sejajar. Namun, dengan tab, misalignment sering menjadi sangat radikal:

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

Tiba-tiba perbedaan kecil dalam lebar antara 'i' dan 'm' atau 'x' dalam font-variabel lebar kami telah diperbesar ke penghentian seluruh tab.

Intinya adalah bahwa hampir semua perubahan dalam cara Anda melihat kode dengan tab, tidak peduli seberapa sepele, dapat dan biasanya akan menghasilkan kekacauan yang tidak dapat dibaca.

Untuk menjawab pertanyaan Anda yang lain: orang lain sudah menunjukkannya, tapi saya tidak bisa membayangkan siapa pun dalam editor pemrograman (atau banyak hal lainnya) benar-benar menggunakan spasi untuk memasukkan spasi, jadi pertanyaan Anda tentang: "mengetik spacespacespacespace" adalah tidak relevan karena tidak ada yang melakukan itu. Demikian juga dengan spasi-belakang: sulit membayangkan seorang editor yang perlu menekan BkSpcempat kali untuk pergi ke penghentian tab sebelumnya, jadi (sekali lagi) pertanyaannya tidak relevan.

Intinya: tab baik-baik saja jika Anda (dan hanya Anda) akan pernah melihat kode Anda, dan Anda hanya pernah melakukannya dengan satu editor yang Anda tidak pernah mengkonfigurasi ulang (sama sekali!) Kondisi tersebut, bagaimanapun, sangat dekat dengan mustahil untuk menegakkan bahwa hanya ada satu jawaban yang masuk akal: tidak pernah menggunakan tab sama sekali.

Jerry Coffin
sumber
1
Saya melihat Anda mengatakan "font proporsional memecah spasi dan tab, tetapi memecah tab lebih buruk, jadi gunakan spasi". Mengapa tidak menggunakan tabstop elastis? nickgravgaard.com/elastictabstops
amara
@sparkleshy: Ini ide yang bagus, tetapi tidak ada bedanya dengan kode asli, dan tidak akan sampai semua (atau setidaknya sebagian besar) editor nyata sudah memasukkannya.
Jerry Coffin
... Saya tahu: '(- yah, agak. Anda masih dapat menggunakan editor yang didukung oleh spasi (seperti tombol tab seharusnya jika Anda menggunakan spasi) tetapi berpura-pura itu tabstop elastis; itu membuat mengelola spasi lebih mudah
amara
2
Jika Anda memprogram dalam font dengan lebar proporsional, Anda punya banyak masalah daripada hanya tab yang perlu dikhawatirkan ...
Brian Knoblauch
1
@BrianKnoblauch: Sebagai seseorang yang menggunakan font eurofurence, saya harus tidak setuju. Satu-satunya hal yang pernah menyebabkan saya masalah adalah ruang. Ini juga ada hubungannya dengan gaya indentasi saya, yang artinya tidak pernah berbeda lebih dari satu tab di antara baris. Dengan asumsi saya pernah mendapatkan tabstop elastis, kode saya akan terlihat lebih baik.
Magus
2

Masalah besar adalah inkonsistensi dari lebar "tab" kadang-kadang mereka diterjemahkan sebagai empat spasi kadang delapan. Di banyak editor, Anda dapat mengaturnya dari 1 hingga 9 spasi.

Jadi ini mengubah editor WYSWYG sederhana menjadi Apa yang Anda Lihat adalah Apa yang MUNGKIN dapatkan oleh orang lain.

Ini masalah khusus untuk Python, tetapi juga masalah dalam bahasa "kurung keriting" mana lekukan digunakan untuk menyampaikan makna kepada pembaca manusia dan tab yang kacau membuat kode sulit dibaca.

James Anderson
sumber