Mengapa Python pep-8 sangat merekomendasikan spasi di atas tab untuk lekukan?


146

Saya melihat pada Stack Overflow dan PEP 8 bahwa rekomendasinya adalah menggunakan spasi hanya untuk lekukan dalam program Python. Saya dapat memahami perlunya indentasi yang konsisten dan saya merasakan sakit itu.

Apakah ada alasan mendasar mengapa ruang lebih disukai? Saya akan berpikir bahwa tab jauh lebih mudah untuk dikerjakan.


7
Baca diskusi PEP untuk mengetahui.
e-satis

106
1 level indentasi adalah ... 1. Ini benar-benar tidak masuk akal untuk setuju menggunakan N spasi ketika Anda semua bisa menggunakan satu tab. Omong-omong, yang sebenarnya dimaksudkan untuk melakukan itu. Indentasi Sekali. 1 level indentasi = 1 karakter tunggal, yaitu 1 tab tunggal. Dan mereka lebih berguna karena setiap pembuat kode dapat dengan bebas memilih cara memvisualisasikannya. Menggunakan spasi itu bodoh, saya belum pernah melihat satu argumen pun untuk itu yang tidak bodoh.
o0 '.

31
@BlueBomber dan mengapa Anda tidak memaksa orang untuk memiliki ukuran font dan skema warna yang Anda sukai, sementara Anda melakukannya? Masih bodoh.
o0 '.

10
@BlueBomber tidak, tidak, ini PERSIS berada pada tingkat absurd yang sama.
o0 '.

9
@BlueBomber Apa sebenarnya bedanya? Anda mengurangi tingkat kebebasan dalam konfigurasi pengembang lain di lingkungan mereka tanpa mencapai keuntungan yang nyata. Jika Anda ingin menjadi diktator dan memaksa semua orang untuk melihat kode dengan indentasi yang sesuai dengan 2 atau 4 atau 29 spasi Anda masih bisa melakukan ini dengan tab. Hanya meminta bawahan Anda untuk mengatur IDE mereka untuk menampilkan tab yang sesuai dengan jumlah ruang pilihan Anda. Jika Anda tidak memiliki wewenang untuk melakukan hal ini, mungkin Anda harus membiarkan mereka memutuskan sendiri seberapa lebar suatu indentasi yang nyaman di mata mereka.
Asad Saeeduddin

Jawaban:


111

Jawabannya diberikan di sana di PEP [ed: bagian ini telah diedit pada 2013 ]. Saya mengutip:

The paling populer cara indentasi Python dengan spasi saja.

Apa alasan mendasar lainnya yang Anda butuhkan?

Singkatnya: Pertimbangkan juga ruang lingkup PEP sebagaimana dinyatakan dalam paragraf pertama:

Dokumen ini memberikan konvensi pengkodean untuk kode Python yang terdiri dari pustaka standar dalam distribusi Python utama.

Tujuannya adalah untuk membuat semua kode yang masuk dalam distribusi python resmi diformat secara konsisten (Saya harap kita dapat setuju bahwa ini adalah universal Good Thing ™).

Karena keputusan antara spasi dan tab untuk masing-masing programmer adalah a) benar-benar masalah selera dan b) mudah ditangani dengan cara teknis (editor, skrip konversi, dll.), Ada cara yang jelas untuk mengakhiri semua diskusi: pilih satu .

Guido yang memilih. Dia bahkan tidak harus memberikan alasan, tetapi dia masih melakukannya dengan merujuk pada data empiris.

Untuk semua tujuan lain, Anda dapat menggunakan PEP ini sebagai rekomendasi, atau Anda dapat mengabaikannya - pilihan Anda, atau pilihan tim Anda, atau pemimpin tim Anda.

Tetapi jika saya dapat memberi Anda satu saran: jangan mix'em ;-) [ed: Mencampur tab dan spasi tidak lagi menjadi pilihan.]


11
Sepakat. Konsistensi lebih penting daripada tab vs ruang X vs ruang Y.
Mike Clark

10
membuat saya bertanya-tanya ... mengapa perpustakaan standar memiliki begitu banyak nama metode mixedCase?
Kyle Wild

6
@dorkitude: a) tidak ada yang sempurna. b) alasan historis.

8
Jadi mengapa begitu banyak programmer memilih untuk menggunakan spasi sebelum PEP-8? Itulah yang benar-benar ingin saya ketahui. Keuntungan dari tab tampak jelas bagi saya, tetapi bukan spasi.
einnocent


95

Yah, sepertinya semua orang sangat bias terhadap ruang. Saya menggunakan tab secara eksklusif. Saya tahu betul mengapa.

Tab sebenarnya adalah penemuan keren, yang muncul setelah spasi. Ini memungkinkan Anda untuk inden tanpa mendorong ruang jutaan kali atau menggunakan tab palsu (yang menghasilkan spasi)

Saya benar-benar tidak mengerti mengapa semua orang membedakan penggunaan tab. Hal ini sangat mirip dengan orang tua yang membedakan orang yang lebih muda untuk memilih teknologi yang lebih baru dan lebih efisien dan mengeluh bahwa panggilan pulsa berfungsi pada setiap telepon , tidak hanya pada yang baru yang mewah ini. "Panggilan nada tidak berfungsi di setiap telepon, itu sebabnya itu salah".

Editor Anda tidak dapat menangani tab dengan benar? Dapatkan editor modern . Mungkin waktu yang sangat tepat, kita sekarang di abad ke-21 dan waktu ketika seorang editor adalah perangkat lunak rumit teknologi tinggi sudah lama berlalu. Kami sekarang memiliki berton-ton editor untuk dipilih, semuanya mendukung tab. Selain itu, Anda dapat menentukan berapa banyak tab seharusnya, hal yang tidak dapat Anda lakukan dengan spasi. Tidak bisa melihat tab? Apa itu argumen? Anda juga tidak bisa melihat spasi!

Bolehkah saya begitu berani menyarankan untuk mendapatkan editor yang lebih baik? Salah satu dari teknologi tinggi ini, yang sudah dirilis sekitar 10 tahun yang lalu, yang menampilkan karakter yang tidak terlihat ? (sarkasme mati)

Menggunakan spasi menyebabkan lebih banyak pekerjaan menghapus dan memformat. Itu sebabnya (dan semua orang lain yang mengetahui hal ini dan setuju dengan saya) menggunakan tab untuk Python.

Mencampur tab dan spasi adalah argumen tidak boleh dan tidak tentang itu. Itu berantakan dan tidak pernah bisa berfungsi.


26
Untuk menambah itu, lihat keyboard Anda, simbol kunci TAB menggambarkan dengan jelas lekukan - itu tujuan indentasi kunci bukan SPACE. PEP8 merekomendasikan untuk menggunakan spasi adalah kesalahan IMHO tapi itu hanya rekomendasi - en.wikipedia.org/wiki/Tab_character#Tab_characters
Daniel Sokolowski

29
Setuju dengan pos ini sepenuhnya. Menggunakan spasi adalah untuk orang bodoh yang senang tersandung pada 1 spasi dari kesalahan indentasi. Jika indentasi Anda dimatikan oleh 1 tab, saya jamin Anda akan melihatnya.
Sepero

12
@Zingham Tidak ada yang bisa menggunakan tab secara eksklusif: tab dan spasi selalu digunakan dalam kombinasi dan ini mengarah pada inkonsistensi. Saya dan ribuan orang lainnya menggunakannya secara konsisten setiap hari. Tab untuk indentasi, spasi untuk penyelarasan. Tepatnya bagian mana dari konsep ini yang Anda rasa sangat sulit untuk dipahami, dan mengapa Anda yakin bahwa tidak mungkin untuk menerapkannya secara konsisten?
antred

1
Masalah sebenarnya dengan tab adalah Anda tidak bisa mendapatkan indendasi persis ke-karakter yang direkomendasikan oleh PEP8 yang sama di bawah komentar "# Selaras dengan pembukaan pembatas." Itulah satu-satunya alasan untuk memilih spasi: untuk mendapatkan lekukan yang benar!
user541905

2
Pertanyaannya adalah "Mengapa Python pep-8 sangat merekomendasikan spasi di atas tab untuk lekukan?" . Jawaban ini tidak pernah menyebutkan apapun tentang PEP8. ||| Alih-alih mencoba menjawab pertanyaan ... jawaban ini muncul bagi saya sebagai salah satu potongan opini besar yang merendahkan . Ada 276 kata yang digunakan untuk mengatakan "tab lebih baik daripada spasi dan inilah sebabnya ...".
Trevor Boyd Smith

43

Saya pribadi tidak setuju dengan spasi di atas tab. Bagi saya, tab adalah karakter / mekanisme tata letak dokumen sementara spasi untuk konten atau penggambaran antar perintah dalam kasus kode.

Saya harus setuju dengan komentar Jim bahwa tab tidak benar-benar masalah, itu adalah orang-orang dan bagaimana mereka ingin mencampur tab dan spasi.

Yang mengatakan, saya telah memaksa diri saya untuk menggunakan ruang demi konvensi. Saya menghargai konsistensi daripada preferensi pribadi.


3
Saya mencoba memaksa diri saya untuk menggunakan spasi juga, tetapi editor (setidaknya Eclipse + PyDev) tab yang bijak menang terutama jika Anda mengaktifkan show karakter yang tidak terlihat. Dan saya dapat dengan mudah mengatur tab menjadi 4, 8, 6 spasi secara visual. Jadi dalam kode saya setidaknya saya menghargai preferensi pribadi, dan tetap berpegang pada spasi jika itu adalah konvensi yang ditetapkan dalam basis kode yang ada.
Daniel Sokolowski

2
Tidak masalah selama Anda tidak membuat kode dalam tim. Setelah Anda berada di tim, Anda menyetujui satu konvensi dan tetap pada itu.
Soviut

1
@Soviut Itu sepertinya sebagian besar angan-angan bagi saya. Di semua tim yang pernah saya kunjungi, garis partai resmi adalah "gunakan spasi". Kenyataannya adalah bahwa hampir setiap file berantakan total pada tab dan spasi, dan bahkan dalam file yang secara konsisten hanya menggunakan spasi atau hanya tab, lekukan masih ada di semua tempat.
antred

Ya tapi itulah yang saya maksud. Beberapa konsensus akhirnya tercapai dan ditegakkan. Seperti yang Anda katakan, biasanya "hanya menggunakan spasi".
Soviut

ini adalah alasan utama mengapa saya lebih suka tab. Masuk akal untuk memiliki karakter terpisah untuk tata letak dan pembatas kata
woojoo666

31

Alasan spasi adalah bahwa tab bersifat opsional. Spasi adalah penyebut terendah yang paling umum dalam tanda baca.

Setiap editor teks yang layak memiliki "ganti tab dengan spasi" dan banyak orang menggunakan ini. Tapi tidak selalu.

Sementara beberapa editor teks mungkin mengganti serangkaian spasi dengan tab, ini sangat jarang.

Intinya . Anda tidak bisa salah dengan spasi. Anda mungkin salah dengan tab. Jadi jangan gunakan tab dan mengurangi risiko kesalahan.


15
Saya tidak akan pernah bersumpah untuk melakukan sesuatu dengan cara yang salah hanya karena banyak orang lain (orang, editor teks, dll) juga terjadi dengan cara yang salah. Pada 2015, editor teks yang tidak menangani tab termasuk dalam tempat sampah.
antred

2
"Anda tidak dapat salah dengan spasi. Anda mungkin salah dengan tab". Saya telah menemukan bahwa menjadi 100% kocar-kacir salah. Dalam pengalaman saya: "Anda tidak bisa salah dengan Tab. Anda mungkin salah dengan spasi" ... terutama ketika berbagi kode.
cmroanirgo

5
Jadi seseorang akhirnya mengatakannya: gunakan spasi karena itu adalah penyebut umum terendah. Aturan yang sama membuat kami tetap menggunakan MBR, BIOS, dan formulir kertas di kantor pemerintah. Kecuali bahwa ini sebenarnya memiliki masalah konseptual, sedangkan tab vs spasi adalah masalah pengguna bodoh 100%.
Milind R

1
Bagi saya ini adalah Argumentum ad populum: argumen keliru yang menyimpulkan bahwa proposisi itu benar karena banyak atau kebanyakan orang mempercayainya. Karena setiap editor dapat mengganti tab dengan spasi maka spasi adalah pilihan yang tepat adalah kesalahan !!
Djunzu

28

Masalah dengan tab adalah bahwa mereka tidak terlihat, dan orang tidak pernah bisa menyetujui lebar tab. Ketika Anda mencampur tab dan spasi, dan Anda mengatur tabstop pada sesuatu selain Python (yang menggunakan tabstops setiap 8 spasi) Anda akan melihat kode dalam tata letak yang berbeda dari yang Python lihat. Dan karena tata letak menentukan blok, Anda akan melihat logika yang berbeda. Ini mengarah ke bug halus.

Jika Anda bersikeras menentang PEP 8 dan menggunakan tab - atau lebih buruk, mencampur tab dan spasi - setidaknya selalu menjalankan python dengan argumen '-tt', yang membuat lekukan yang tidak konsisten (kadang-kadang tab, kadang-kadang ruang untuk lekukan yang sama level) kesalahan. Juga, jika mungkin, atur editor Anda untuk menampilkan tab secara berbeda. Tapi sungguh, pendekatan terbaik adalah tidak menggunakan tab, titik.


43
Benar bahwa tab tidak terlihat dan orang tidak dapat menyetujui lebar tab. Tetapi hal yang sama juga berlaku untuk ruang. Saat Anda mencampur tab dan spasi, ada yang salah. Tetapi mengapa Anda menyalahkan situasi itu pada tab dan bukan spasi?
Jim

47
Tidak, hal yang sama tidak berlaku untuk spasi. Orang dapat menyetujui lebar ruang.
Rafał Dowgird

32
Satu spasi mungkin selalu memiliki lebar yang sama, tetapi lekukan dengan spasi tidak selalu memiliki lebar yang sama. Saya gagal melihat bagaimana menyetujui untuk menggunakan tab dan spasi lebar berbeda dengan menyetujui untuk membuat indentasi dengan spasi.
Jim

26
Ya, saya tahu masalah pencampuran keduanya bisa menyebabkan. Yang tidak saya mengerti adalah mengapa beberapa orang menyalahkan hal itu. Masalahnya adalah mencampurnya, bukan tab khususnya. Anda bisa memecahkan masalah dengan mengganti tab dengan spasi, tetapi Anda juga bisa menyelesaikan masalah dengan mengganti spasi dengan tab.
Jim

70
Dan tidak, jika saya menggunakan tab 8-lebar dan Anda menggunakan tab 6-lebar, dan kami membagikan kode, itu tidak akan kacau. Itu semua hanya satu tab untuk interpreter Python.
Jim

22

Masalah utama dengan indentasi terjadi ketika Anda mencampur tab dan spasi. Jelas ini tidak memberi tahu Anda mana yang harus Anda pilih, tetapi itu adalah alasan yang bagus untuk merekomendasikannya, bahkan jika Anda mengambilnya dengan membalik koin.

Namun, IMHO ada beberapa alasan kecil untuk memilih spasi daripada tab:

  • Alat yang berbeda. Terkadang kode ditampilkan di luar editor programmer. Misalnya. diposting ke newsgroup atau forum. Spasi umumnya lebih baik daripada tab di sini - di mana-mana ruang akan hancur, tab juga, tetapi tidak sebaliknya.

  • Pemrogram melihat sumbernya secara berbeda. Ini sangat subjektif - baik manfaat utama tab, atau alasan untuk menghindarinya tergantung pada sisi mana Anda berada. Di sisi positifnya, pengembang dapat melihat sumber dengan indentasi pilihan mereka, sehingga pengembang yang memilih indentasi 2-ruang dapat bekerja dengan pengembang 8-ruang pada sumber yang sama dan tetap melihatnya sesuka mereka. Kelemahannya adalah bahwa ada konsekuensi terhadap hal ini - beberapa orang menyukai 8-ruang karena memberikan umpan balik yang sangat terlihat bahwa mereka terlalu bersarang - mereka mungkin melihat kode diperiksa oleh 2-indentor yang selalu dibungkus dengan editor mereka. Memiliki setiap pengembang melihat kode dengan cara yang sama mengarah ke lebih panjang garis konsistensi wrt, dan hal-hal lain juga.

  • Lekukan garis lanjutan. Terkadang Anda ingin membuat indentasi sebuah baris untuk mengindikasikan bahwa baris tersebut dibawa dari yang sebelumnya. misalnya.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    Jika menggunakan tab, tidak ada cara untuk menyelaraskan ini untuk orang yang menggunakan tabstop berbeda di editor mereka tanpa mencampur spasi dan tab. Ini secara efektif membunuh manfaat di atas.

Namun jelas, ini adalah masalah yang sangat religius, yang pemrogramannya terganggu. Masalah yang paling penting adalah bahwa kita harus memilih satu - bahkan jika itu bukan yang Anda sukai. Kadang-kadang saya berpikir bahwa keuntungan terbesar dari lekukan signifikan adalah bahwa setidaknya kita terhindar dari flamewars penempatan brace.

Juga layak dibaca adalah artikel ini oleh Jamie Zawinski tentang masalah ini.


3
Penjajaran ini sepele. Saya cukup menggunakan tanda kurung seperti blok dan membuat indentasi setiap arg. Juga, dalam contoh Anda, Anda dapat menggunakan spasi karena Anda berada di dalam daftar argumen dan Anda dapat menumpuk sebanyak mungkin ruang di sana.
Soviut

3
@Sutut: Jika Anda indentasi dengan spasi, perataan akan kacau segera setelah dilihat dengan ukuran tab yang berbeda. Satu-satunya cara untuk melestarikannya adalah dengan menggunakan tab ke level indent, dan kemudian spasi untuk sisanya - yaitu mencampur ruang dan tab, yang mengarah ke masalah sendiri.
Brian

Ya, itulah sebabnya saya cenderung hanya menggunakan konvensi python dari blok indentasi pada argumen saya. Tentu, mereka mungkin tidak sejajar dengan brace terbuka, tetapi masih jelas baris atau perintah yang menjadi milik mereka. Sintaks JQuery beroperasi pada prinsip yang sama.
Soviut

2
@ Brian: Saya tidak melihat bagaimana itu mengarah ke masalah. Ini persis cara yang benar, tab untuk lekukan, spasi untuk penyelarasan. Sama sekali tidak sama dengan mencampur spasi dan tab untuk indentasi .
antred

1
@CoreDumpError. Eh tidak, tentu saja tidak. Saya tahu itu karena Python 3 tidak pernah mengeluh tentang skrip saya, dan saya menggunakan tab untuk indentasi / spasi untuk menyelaraskan semua waktu yang terkutuk. Juga, PEP8 tidak dapat "melarang" apa pun, karena itu hanya rekomendasi (dan rekomendasi yang diremehkan, menurut saya).
antred

12

Perhatikan bahwa penggunaan tab membingungkan aspek lain dari PEP 8:

Batasi semua baris hingga maksimal 79 karakter.

Katakanlah, secara hipotetis, bahwa Anda menggunakan lebar tab 2 dan saya menggunakan lebar tab 8. Anda menulis semua kode Anda sehingga garis terpanjang Anda mencapai 79 karakter, maka saya mulai bekerja pada file Anda. Sekarang saya punya kode yang sulit dibaca karena (seperti yang dinyatakan PEP):

Pembungkus default di sebagian besar alat mengganggu struktur visual kode

Jika kita semua menggunakan 4 spasi, itu SELALU sama. Siapa pun yang editornya dapat mendukung lebar 80 karakter dapat dengan nyaman membaca kode. Catatan: Batas 80 karakter adalah perang suci, jadi jangan mulai di sini.

Editor yang tidak beruntung harus memiliki opsi untuk menggunakan spasi seolah-olah mereka tab (baik menyisipkan dan menghapus), sehingga benar-benar tidak boleh menjadi argumen yang valid.


7

Jawaban untuk pertanyaan ini adalah: PEP-8 ingin membuat rekomendasi dan telah memutuskan bahwa karena ruang lebih populer, maka akan sangat merekomendasikan ruang di atas tab.


Catatan tentang PEP-8

PEP-8 mengatakan 'Gunakan 4 spasi per level indentasi.'
Jelas bahwa ini adalah rekomendasi standar.

'Untuk kode yang benar-benar lama yang tidak ingin Anda galau, Anda dapat terus menggunakan tab 8-ruang.'
Jelas bahwa ada BEBERAPA keadaan ketika tab dapat digunakan.

"Jangan pernah mencampur tab dan spasi."
Ini adalah larangan yang jelas untuk mencampurkan - saya pikir kita semua sepakat tentang ini. Python dapat mendeteksi hal ini dan sering tersedak. Menggunakan argumen -tt membuat ini kesalahan eksplisit.

'Cara indentasi Python yang paling populer adalah dengan spasi saja. Cara kedua yang paling populer adalah dengan tab saja. '
Ini dengan jelas menyatakan bahwa keduanya digunakan. Untuk menjadi sangat jelas: Anda seharusnya tidak pernah mencampur spasi dan tab dalam file yang sama.

'Untuk proyek baru, hanya spasi yang sangat disarankan di atas tab.'
Ini adalah rekomendasi yang jelas, dan yang kuat, tetapi bukan larangan tab.


Saya tidak dapat menemukan jawaban yang bagus untuk pertanyaan saya sendiri di PEP-8. Saya menggunakan tab, yang secara historis saya gunakan dalam bahasa lain. Python menerima sumber dengan penggunaan tab secara eksklusif. Itu cukup baik untukku.

Saya pikir saya harus bekerja dengan ruang. Di editor saya, saya mengonfigurasi tipe file untuk menggunakan spasi secara eksklusif dan karenanya menyisipkan 4 spasi jika saya menekan tab. Jika saya menekan tab terlalu banyak, saya harus menghapus spasi! Arrgh! Empat kali lebih banyak dari tab! Editor saya tidak dapat mengatakan bahwa saya menggunakan 4 spasi untuk indentasi (walaupun editor AN mungkin dapat melakukan ini) dan jelas bersikeras menghapus spasi satu per satu.

Tidak bisakah Python diberitahu untuk menganggap tab sebagai n spasi ketika lekukan pembacaannya? Jika kita bisa menyetujui 4 spasi per indentasi dan 4 spasi per tab dan mengizinkan Python untuk menerima ini, maka tidak akan ada masalah.
Kita harus menemukan solusi win-win untuk masalah.


1
Editor apa yang Anda gunakan? Sebagian besar yang saya gunakan memiliki opsi untuk dikurangkan pada backspace (emacs berperilaku seperti ini misalnya), terlepas dari implementasi indentasi.
Brian

Anda benar - saya tidak melihat opsi untuk dikurangkan di backspace, tetapi Anda mungkin bisa mengatasinya menggunakan shift-tab, atau mengurangi indent (ctrl-shift-i secara default) sebagai gantinya.
Brian

Saya hanya mencoba PyScripter yang tampaknya memuat lebih baik dalam menggunakan spasi ketika Anda menekan tab dan menghapusnya dalam 4 ketika Anda menekan backspace.
quamrana

28
"Aku harus menghapus spasi! Arrgh! Empat kali lebih banyak dari pada tab!" - Ini adalah satu-satunya alasan saya menggunakan tab untuk semuanya, dan mengapa saya pikir orang yang menggunakan spasi gila. :) Saya tidak pernah mengalami masalah, kecuali ketika saya menempelkan sesuatu dari web yang menggunakan spasi. Kemudian perbaikan sederhana mencari-ganti itu.
Aphex

3

Saya selalu menggunakan tab dalam kode saya. Yang mengatakan, saya baru-baru ini menemukan alasan untuk menggunakan spasi: Ketika mengembangkan pada tablet internet Nokia N900 saya, saya sekarang memiliki keyboard tanpa tombol tab. Ini memaksa saya untuk menyalin dan menempel tab atau menulis ulang kode saya dengan spasi. Saya mengalami masalah yang sama dengan ponsel lain. Memang, ini bukan penggunaan standar Python, tetapi sesuatu yang perlu diingat.


2

JWZ mengatakan yang terbaik :

Ketika [orang-orang] membaca kode, dan ketika mereka selesai menulis kode baru, mereka peduli tentang berapa banyak kolom layar di mana kode cenderung inden ketika ruang lingkup baru (atau sexpr, atau apa pun) terbuka ...

... Pendapat saya adalah bahwa cara terbaik untuk menyelesaikan masalah teknis adalah dengan mengamanatkan bahwa karakter TAB ASCII # 9 tidak pernah muncul dalam file disk: program editor Anda untuk memperluas TAB ke sejumlah ruang yang sesuai sebelum menulis baris ke disk. ..

... Ini mengasumsikan bahwa Anda tidak pernah menggunakan tab di tempat-tempat di mana mereka sebenarnya signifikan, seperti dalam string atau konstanta karakter, tetapi saya tidak pernah melakukan itu: ketika penting bahwa itu adalah tab, saya selalu menggunakan '\ t' sebagai gantinya.


10
Saya akan melakukan yang sebaliknya: tab memiliki makna semantik untuk indentasi, jadi lebih baik jika tab disimpan dan spasi ditampilkan. Pengguna dapat memilih gaya pemformatan dan editor akan memperluas tab yang sesuai.
AkiRoss

1
Anda masih memiliki masalah tab dan spasi campuran, serta satu penulis menggunakan 1 kolom per tab dan indentasi 4+ kali, yang akan terlihat gila di set editor teks untuk menampilkan setiap karakter tab selebar 4 kolom. Tab untuk indentasi paling masuk akal dalam editor teks lebar variabel, seperti pengolah kata yang menggunakan font dengan spasi proporsional. Tidak begitu banyak dengan editor teks tetap-lebar.
Mark Cidade

2
Tidak, saya bermaksud bahwa editor teks harus dapat menguraikan tata bahasa dan memahami kapan tabulasi terjadi, sehingga tab dapat digunakan hanya sebagai rata-rata pemformatan dan tidak perlu menggunakan spasi untuk lekukan. "tab" tidak diharuskan memiliki lebar tetap, dan secara umum saya merasa memalukan bahwa dengan teknik saat ini (mis. pembelajaran mesin), memformat masih menjadi masalah bagi programmer. Semuanya harus otomatis dan harus otomatis dan transparan.
AkiRoss

Saya tidak melihat bagaimana hal itu dapat memahaminya.
Mark Cidade

1

Karena python bergantung pada indentasi untuk mengenali struktur program, diperlukan cara yang jelas untuk mengidentifikasi identitas. Ini adalah alasan untuk memilih spasi atau tab.

Namun, python juga memiliki filosofi yang kuat hanya memiliki satu cara untuk melakukan sesuatu, oleh karena itu harus ada rekomendasi resmi untuk satu cara untuk melakukan lekukan.

Baik spasi dan tab menghadirkan tantangan unik bagi editor untuk ditangani sebagai lekukan. Penanganan tab itu sendiri tidak seragam di seluruh editor atau bahkan pengaturan pengguna. Karena spasi tidak dapat dikonfigurasi, mereka memberikan pilihan yang lebih logis karena mereka menjamin bahwa hasilnya akan terlihat sama di mana-mana.


8
Dan karena setiap editor juga dapat memilih skema warnanya, apakah menurut Anda mereka harus memberi mandat juga skema warna mana yang akan digunakan?
o0 '.

8
Ya tapi bukankah ketidakkonsistenan ini sebenarnya lebih masuk akal? Karena itu hanyalah masalah preferensi visual. Jika saya lebih suka indentasi "tampak" yang lebih besar di editor saya, saya dapat mengatur tab saya menjadi 8 spasi, jika saya lebih suka lebih sedikit, saya dapat mengaturnya menjadi 2. Dengan begitu kode, tanpa benar-benar mengubah format, lebih sesuai dengan individu yang mengamatinya.
dennmat

8
Saya setuju dengan dennmat- Jika saya lebih suka secara visual 2 spasi, dan Guido secara visual lebih suka 4 spasi, maka pilihan logisnya adalah menggunakan lekukan tab.
Sepero

0

Keuntungan paling signifikan yang dapat saya katakan tentang spasi lebih dari tab adalah bahwa banyak programmer dan proyek menggunakan sejumlah kolom untuk kode sumber, dan jika seseorang melakukan perubahan dengan tabstop mereka diatur ke 2 spasi dan proyek menggunakan 4 spasi sebagai tabstop, garis panjang akan terlalu panjang untuk jendela editor orang lain. Saya setuju bahwa tab lebih mudah untuk dikerjakan, tetapi saya pikir ruang lebih mudah untuk kolaborasi, yang penting pada proyek open source besar seperti Python.


2
ini salah: ini terjadi hanya jika Anda mencampur tab dan spasi, dan Anda akan menyelesaikannya dengan memaksa semua orang menggunakan tab alih-alih spasi.
o0 '.

0

Anda dapat memiliki kue dan memakannya. Setel editor Anda untuk membuka tab menjadi spasi secara otomatis.

(Itu akan :set expandtabdi Vim.)


0

Dugaan saya adalah bahwa sebagian besar editor teks linux membuat standar tampak sangat besar secara default. Saya tidak bisa memikirkan alasan bagus lainnya untuk menggunakan spasi di atas tab.


-1

Selain semua alasan lain yang sudah disebutkan (konsistensi, tidak pernah mencampur ruang dan tab dll) Saya percaya ada beberapa alasan lagi untuk konvensi 4 ruang untuk dicatat. Ini hanya berlaku untuk Python (dan mungkin bahasa lain di mana indentasi memiliki makna). Tab mungkin lebih baik dalam bahasa lain, tergantung pada preferensi individu.

  1. Jika editor tidak menunjukkan tab (yang terjadi, tergantung pada konfigurasi, dalam beberapa), penulis lain mungkin berasumsi bahwa kode Anda menggunakan 4 spasi, b / c hampir semua kode Python yang tersedia untuk umum tidak; jika editor yang sama kebetulan memiliki lebar tab 4, hal-hal buruk dapat terjadi - setidaknya, orang miskin itu akan kehilangan waktu karena masalah lekukan yang akan sangat mudah dihindari dengan tetap berpegang pada konvensi. Jadi bagi saya, alasan nomor satu adalah untuk menghindari bug dengan konsistensi.

  2. Membingkai ulang pertanyaan mana yang lebih baik, tab atau spasi, orang harus bertanya mana kelebihan tab; Saya telah melihat banyak posting yang memuji tab, tetapi sedikit argumen yang meyakinkan untuk mereka; editor yang baik seperti emacs, vi (m), kate, ... melakukan indentasi yang tepat tergantung pada semantik kode Anda - bahkan tanpa tab; editor yang sama dapat dengan mudah dikonfigurasikan untuk melepas pada backspace dll.

  3. Beberapa orang memiliki preferensi yang sangat kuat dalam hal kebebasan mereka dalam menentukan tampilan / tata letak kode; yang lain menghargai konsistensi atas kebebasan ini. Python secara drastis mengurangi kebebasan ini dengan menentukan bahwa lekukan digunakan untuk blok dll. Ini dapat dilihat sebagai bug atau fitur, tetapi itu semacam datang dengan memilih Python. Secara pribadi, saya suka konsistensi ini - ketika mulai kode pada proyek baru, setidaknya tata letak dekat dengan apa yang saya terbiasa, jadi itu cukup mudah dibaca. Hampir selalu.

  4. Menggunakan spasi untuk lekukan memungkinkan "trik tata letak" yang dapat memfasilitasi untuk memahami kode; beberapa contohnya tercantum dalam PEP8; misalnya.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    Tentu saja, di atas juga dapat ditulis dengan baik

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    Namun, yang terakhir membutuhkan lebih banyak baris kode dan lebih sedikit baris kadang-kadang dianggap lebih baik (Anda mendapatkan lebih banyak pada satu layar). Tetapi jika Anda suka perataan, spasi (lebih disukai dibantu oleh editor yang baik) memberi Anda, dalam arti tertentu, lebih banyak kebebasan dalam Python daripada tab. [Yah, kurasa beberapa editor mengizinkanmu melakukan hal yang sama;) - tetapi dengan spasi, semuanya melakukannya ...]

  5. Kembali ke argumen yang sama dengan yang dibuat orang lain - PEP 8 menentukan (ok, sangat disarankan) spasi. Jika datang ke proyek yang hanya menggunakan tab, tentu saja, Anda tidak punya banyak pilihan. Tetapi karena pembentukan konvensi PEP 8, hampir semua programmer Python terbiasa dengan gaya ini. Ini membuatnya sangaaaat lebih mudah untuk menemukan konsensus pada gaya yang diterima oleh sebagian besar programmer ... dan memiliki individu yang setuju pada gaya mungkin sangat sulit sebaliknya.

  6. Alat yang membantu menegakkan gaya biasanya menyadari PEP 8 tanpa usaha ekstra. Itu bukan alasan yang bagus, tapi itu hanya baik untuk memiliki hal-hal yang bekerja ~ di luar kotak.


-3

Masalah universal dengan tab adalah mereka dapat diwakili secara berbeda di lingkungan yang berbeda.
Di editor yang diberikan, tab mungkin 8 spasi atau mungkin 2.
Di beberapa editor, Anda dapat mengontrol ini, sementara di yang lain Anda tidak bisa.

Masalah lain dengan tab adalah bagaimana mereka diwakili dalam hasil cetak. Saya percaya sebagian besar printer menafsirkan tab sebagai 8 spasi.

Dengan ruang, tidak ada keraguan. Semuanya akan berbaris seperti yang dimaksudkan penulis.


14
Orang lain yang secara mendasar salah paham tentang tab ... dapatkan mesin tik mekanik dan bermain dengannya sebentar, sungguh! 1 tab tidak sama dengan 8 spasi! itu sama dengan up_to_8_spaces ! otoh: dengan font proporsional, tab adalah satu - satunya cara untuk menjamin perataan.

3
"Dalam editor yang diberikan, tab mungkin 8 spasi atau 2". Jika saya suka 4-spasi dan teman saya suka 8-spasi atau 2-spasi atau 3-spasi atau, dll. Lalu kita bisa sepakat pada tab karena (sedang karakter lekukan yang didedikasi ), editor tahu apa itu dan dapat menampilkannya demikian. Saya melihat kode dengan lekukan lebar 4-ruang, Anda melihatnya dengan lekukan lebar 8-ruang, teman aneh kami menggunakan 3-spasinya, dan semuanya keren. Keadaan (terutama dalam Python!) Di mana lebar tab itu sendiri akan sangat jarang terjadi sehingga bahkan pemrakarsa ruang jarang memunculkannya.
JamesTheAwesomeDude

-4

Pada diskusi antara Jim dan Thomas Wouters di komentar.

Masalahnya adalah ... karena lebar tab dan spasi keduanya dapat bervariasi - dan karena programmer tidak dapat menyetujui lebar yang mana pun - mengapa tab-tab itu yang disalahkan.

Saya setuju dengan Jim tentang hal itu - tab TIDAK jahat di dalam dan dari diri mereka sendiri. Tapi ada masalah ...

Dengan spasi saya dapat mengontrol bagaimana "KODE SAYA SENDIRI" terlihat di SETIAP editor di dunia. Jika saya menggunakan 4 spasi - maka apa pun editor yang Anda buka kode saya, itu akan memiliki jarak yang sama dari margin kiri. Dengan tab, saya berada pada belas kasihan pengaturan lebar tab untuk editor - bahkan untuk KODE SENDIRI SAYA. Dan saya tidak suka itu.

Jadi, meskipun benar bahwa bahkan spasi tidak dapat menjamin konsistensi - setidaknya mereka memberi Anda lebih banyak kontrol atas tampilan kode SENDIRI di mana-mana - sesuatu yang tidak bisa dilakukan tab.

Saya pikir itu BUKAN konsistensi dalam programer menulis kode - tetapi konsistensi dalam editor menunjukkan kode itu - bahwa ruang membuat lebih mudah untuk mencapai (dan memaksakan).


6
Anda "pada belas kasihan pengaturan lebar tab untuk editor"? Jika editor Anda tidak membiarkan Anda mengatur lebar tab yang Anda inginkan, Anda mungkin menggunakan notepad.exe
user137369

4
@zigg Itu benar-benar tidak relevan dengan argumen, karena dia (dia?) berbicara secara khusus tentang kode sendiri (informasi itu bahkan dicetak tebal, dicetak miring, dan semuanya ditutup). Tidak ada tempat untuk diskusi yang berbagi kode yang relevan.
user137369

1
Editor bukan satu-satunya alat untuk melihat kode. Ada juga diffs, tracebacks, Github dan halaman web lainnya, dan seterusnya yang semuanya akan memilih beberapa lebar tab di luar kendali Anda (mungkin 8).
RemcoGerlich

Saya mengerti maksud Anda. Anda memang mengontrol bagaimana semua orang melihat kode Anda (terkait lekukan). Langkah Anda selanjutnya adalah mengontrol jenis font dan pewarnaan yang akan digunakan semua orang untuk melihat kode Anda. Setelah itu, Anda siap untuk mendominasi dunia itu sendiri dan tidak hanya editor kode !!
Djunzu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.