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.
python
indentation
quamrana
sumber
sumber
Jawaban:
Jawabannya diberikan di sana di PEP [ed: bagian ini telah diedit pada 2013 ]. Saya mengutip:
Apa alasan mendasar lainnya yang Anda butuhkan?
Singkatnya: Pertimbangkan juga ruang lingkup PEP sebagaimana dinyatakan dalam paragraf pertama:
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.]
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
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.
sumber
Perhatikan bahwa penggunaan tab membingungkan aspek lain dari PEP 8:
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):
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.
sumber
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.
sumber
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.
sumber
JWZ mengatakan yang terbaik :
sumber
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.
sumber
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.
sumber
Anda dapat memiliki kue dan memakannya. Setel editor Anda untuk membuka tab menjadi spasi secara otomatis.
(Itu akan
:set expandtab
di Vim.)sumber
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.
sumber
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.
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.
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.
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.
Menggunakan spasi untuk lekukan memungkinkan "trik tata letak" yang dapat memfasilitasi untuk memahami kode; beberapa contohnya tercantum dalam PEP8; misalnya.
Tentu saja, di atas juga dapat ditulis dengan baik
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 ...]
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.
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.
sumber
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.
sumber
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).
sumber