Tampaknya ada konflik tentang apakah lebih baik menggunakan spasi putih atau token seperti tanda kurung untuk menunjukkan ruang lingkup. Saya telah melihat banyak solusi pujian python untuk masalah indentasi yang tidak konsisten, tetapi banyak yang tidak setuju:
Bahasa apa pun yang memiliki spasi putih sebagai token harus mati.
diposting kemudian pada jawaban yang sama:
Saya semacam anti-spasi putih-sebagai-token, sampai saya benar-benar mencobanya. Mungkin membantu bahwa tata ruang putih pribadi saya cukup cocok dengan apa yang semua orang gunakan di python-land. Mungkin karena saya agak minimalis, tetapi jika Anda ingin membuat indentasi, mengapa repot dengan {} s?
Saya dapat melihat beberapa argumen yang jelas untuk setiap sisi:
menggunakan spasi putih:
- membantu mengurangi lekukan yang tidak konsisten dalam kode
- membersihkan layar dengan mengganti token yang terlihat dengan spasi untuk melayani tujuan yang sama
menggunakan token:
- jauh lebih mudah untuk memotong dan menempelkan kode ke tingkat yang berbeda (Anda tidak harus memperbaiki lekukan)
- lebih konsisten. Beberapa editor teks menampilkan spasi putih secara berbeda.
- lebih populer saat ini.
Apakah ada poin yang saya lewatkan? Yang mana yang Anda sukai? Adakah kata-kata bijak setelah bekerja dengan satu atau yang lain untuk waktu yang lama?
PS. Saya benci ketika bahasa tidak menggunakan token yang sama untuk setiap struktur kontrol. VB benar-benar menjengkelkan dengan pernyataan End If
dan End While
, sebagian besar bahasa lain hanya menggunakan {} untuk semuanya. Tapi mungkin itu topik untuk pertanyaan yang berbeda ...
sumber
Jawaban:
Saya pikir banyak dari kita programmer (termasuk saya sendiri) memiliki kecenderungan untuk "membuat logika" setiap keputusan. Itu bagus, tetapi tidak setiap pertanyaan memiliki jawaban yang logis. Sebagai contoh, saya ragu bahwa koki memposting pertanyaan tentang chefoverflow (jika ada hal seperti itu) meminta pro dan kontra dari pai apel vs pai ceri. Ini adalah pertanyaan yang Anda sukai lebih baik.
Dengan mengingat hal itu, saya pikir jawaban paling sederhana adalah dengan mengatakan "Beberapa orang menyukai kawat gigi, beberapa orang menyukai spasi putih" dan membiarkannya begitu saja.
sumber
Dengan risiko terdengar seperti seorang fanboy mengucapkan, saya pikir semua orang yang mengklaim bahwa spasi putih "membantu mengurangi lekukan tidak konsisten dalam kode" tidak pernah menggunakan Visual Studio. Dengan satu perintah (saya pikir pintasan defaultnya adalah Ctrl + K, D), semua lekukannya konsisten secara instan¹. Lebih jauh lagi, ketika menempelkan kode, lekukan diperbaiki secara instan tanpa harus melakukan apa pun, dan hal yang sama berlaku ketika menulis kode baru atau ketika membungkus sesuatu di dalam
if
atau di blok lain (format ulang terjadi saat}
diketik). Lebih jauh lagi, menekan Enter setelah pernyataan yang lengkap selalu menempatkan kursor pada level indentasi yang benar untuk pernyataan berikutnya, bahkan jika pernyataan sebelumnya diindentasi lebih jauh karena suatuif
atau serupa, membuatnya sangat sulit untuk secara tidak sengaja berpikir bahwa suatu pernyataan masih berada di bawahif
ketika itu tidak.Poin yang saya coba sampaikan bukanlah Visual Studio itu hebat. Poin yang saya coba sampaikan adalah bahwa IDE dapat mengotomatiskan perbaikan indentasi (dan masalah pemformatan lainnya), tetapi hanya jika arti dari program tidak bergantung pada pemformatannya. Ini memberi programmer kesempatan yang lebih besar untuk fokus pada tugas pemrograman yang sebenarnya. Sintaksis seperti Python adalah kontraproduktif: tidak mungkin untuk menulis IDE yang dapat "memperbaiki" lekukan kode Python karena lekukan itu sendiri menentukan beberapa semantik.
¹ (Saya tahu ada kasus khusus yang VS menolak untuk memformat ulang, yaitu array literal yang menjangkau beberapa baris, tapi itu intinya.)
sumber
if
baris di mana saja. Anda kemudian harus melanjutkan untuk memperbaiki indentasi secara manual.Secara pribadi saya menemukan saya perlu baris kosong yang diperkenalkan dengan memiliki token pada baris itu sendiri untuk membuat pikiran saya menyadari bahwa kode tersebut berada dalam ruang lingkup lain.
Aku benci ketika orang python pergi:
sementara di tanah token saya benci ketika orang menyalin dan menempel dan tidak membersihkan lekukan ,
atau jangan gunakan jalur terpisah untuk token .
Saya bisa membaca ketiganya, tetapi mereka tidak seperti yang saya harapkan dan saya harus berusaha keras untuk menguraikannya dan seperti yang dikatakan Joel ketika hal-hal tidak berfungsi seperti yang Anda harapkan membuat Anda frustrasi.
sumber
Pro: Tidak ada perang suci penempatan indentasi / penahan keriting di dunia Python sejauh yang saya tahu. Membuat keputusan ini atas nama pengembang mungkin telah menyelamatkan sedikit rasa sakit.
Con: Fungsi anonim terbatas pada satu baris. Kedengarannya ok, tapi saya sering menemukan diri saya menulis multi-line
lambda
dalam Skema (kebanyakan untuk memberi makan kemap
atauapply
di satu tempat, jadi tidak masuk akal untuk menyatakan secara terpisah).sumber
lambda n: a = n \\na.sort() \\na[0:3]
tidak akan mengembalikan kesalahan sintaks? Trik `\` memungkinkan Anda menyebarkan lambda baris tunggal Anda di beberapa baris, tetapi Anda masih belum mendapatkan lebih dari satu baris aktual .{} menambahkan redundansi. Terlalu banyak redudansi buruk, terlalu sedikit buruk. Dan memasukkannya secara manual itu buruk, khususnya. jika sulit untuk menggunakannya.
Jadi di saat IDE yang buruk / tidak ada, gaya spasi putih bisa sedikit lebih baik. Tetapi dengan IDE yang kuat, kawat gigi lebih baik.
sumber
Masalah yang saya temukan dengan bahasa spasi adalah dengan ekspresi kondisional multi-halaman. Menambahkan baris di tengah halaman dua, dan keluar dengan satu spasi di tengah semua kekacauan, dapat secara drastis mengubah logika kode Anda. Dan bahkan jika kode seseorang "benar", mencoba membacanya membuat permainan menebak yang mengerikan. Yang "jika" ini untuk 'yang lain'? Saya dapat menghitung kawat gigi lebih mudah daripada saya dapat menghitung karakter kosong yang tidak terlihat. Dan mesin posting di situs ini terus menghancurkan mereka menjadi satu ruang.
sumber
Saya tidak berpikir itu benar-benar lawan .
Pythoneers sering mengkritik kawat gigi pemrogram seolah-olah mereka akan dengan mudah melanggar lekukan karena mereka bisa.
Bahkan saya selalu menggunakan indentasi konsisten 100% bahkan sebelum mengetahui tentang Python dan pelingkupan indentasinya.
Faktanya adalah bahwa bahasa kawat gigi juga dapat memaksakan lekukan yang benar dalam kompiler dan kami akan memiliki yang terbaik dari kedua dunia. Lihat? tidak versus sama sekali.
Pythoneers berpendapat bahwa kawat gigi tidak berguna ketika lekukan adalah bagian dari sintaksis, tetapi tidak, kawat gigi meningkatkan keterbacaan. Saya mencoba pemrograman Python dan ini adalah bahasa yang sangat menarik bagi saya, tetapi apakah Anda sudah mencoba memiliki
if-elif
rantai lebih dari 2 atau 3 level indentasi? mereka tidak terlihat begitu rapi lagi.PS: Saya menulis kawat gigi tetapi dengan cara yang lebih umum, maksud saya token pembatas. Brace pembuka bisa dianggap berlebihan, tetapi bahasa bisa seperti ini (sebenarnya saya yakin ada bahasa yang persis seperti ini tetapi saya tidak mengenalnya dengan baik):
PS2: 2019, 4 tahun setelah jawaban ini. Saya belajar Python dan benar-benar terbiasa dengan lekukan semantiknya dan tidak merasa sulit untuk membaca sama sekali. Terutama dengan bantuan IDE modern yang menggambar garis vertikal untuk membantu mengidentifikasi blok indentasi.
sumber