Guido Von Rossum
Dari wawancara dengan Guido Van Rossum , yang dapat dilihat dalam teks lengkap dengan books.google.com (penekanan milik saya):
Pilihan indentasi untuk pengelompokan bukan konsep baru dengan Python; Saya mewarisi ini dari ABC , tetapi juga terjadi di occam, bahasa yang lebih tua. Saya tidak tahu apakah penulis ABC mendapatkan ide dari occam, atau menciptakannya secara independen, atau apakah ada leluhur yang sama. Tentu saja, saya bisa memilih untuk tidak mengikuti jejak ABC, seperti yang saya lakukan di daerah lain (misalnya, ABC menggunakan huruf besar untuk kata kunci bahasa dan nama prosedur, sebuah ide yang tidak saya salin), tetapi saya menyukai fitur ini cukup banyak. sedikit saat menggunakan ABC, karena sepertinya menyingkirkan jenis tertentu dari perdebatan sia-sia yang umum di antara pengguna C pada saat itu, tentang di mana menempatkan kurung kurawal .
Von Rossum sangat terinspirasi dari ABC , dan meskipun ia tidak harus menyalin semua itu, penggunaan lekukan tetap dipertahankan karena itu bisa bermanfaat dalam menghindari perang agama.
Saya juga sangat menyadari bahwa kode yang dapat dibaca menggunakan indentasi secara sukarela untuk menunjukkan pengelompokan, dan saya telah menemukan bug yang halus dalam kode di mana lekukan tidak setuju dengan pengelompokan sintaksis menggunakan kurung kurawal — programmer dan setiap pengulas telah mengasumsikan bahwa lekukan cocok dengan pengelompokan tersebut. dan karena itu tidak melihat bug. Sekali lagi, sesi debugging panjang mengajarkan pelajaran yang berharga.
Rossum juga menyaksikan bug karena ketidakkonsistenan antara pengelompokan dan indentasi, dan tampaknya meskipun mengandalkan indentasi hanya untuk menyusun kode akan lebih aman dari kesalahan pemrograman 1 .
Donald E. Knuth & Peter J. Landin
Dalam wawancara yang direferensikan, Guido menyebutkan ide Don Knuth menggunakan indentasi. Ini dirinci dalam Kutipan Indentasi Knuth yang ditemukan kembali , yang mengutip Pemrograman Terstruktur dengan Pernyataan goto . Knuth juga mereferensikan 700 bahasa pemrograman Peter John Landin berikutnya (lihat bagian Diskusi tentang lekukan). Landin mendesain ISWIM yang terlihat seperti bahasa pertama dengan lekukan alih-alih blok awal / akhir. Makalah-makalah itu lebih tentang kelayakan menggunakan indentasi untuk menyusun program daripada argumen aktual yang mendukung melakukannya.
1. Saya pikir ini sebenarnya adalah argumen yang mendukung kedua konstruksi pengelompokan dan pemformatan otomatis, untuk menangkap dan memulihkan dari kesalahan pemrograman, yang pasti akan terjadi. Jika Anda mengacaukan lekukan Anda dengan Python, orang yang mendebug kode Anda harus menebak yang mana yang benar:
if (test(x)):
foo(x)
bar(x)
Haruskah bar
selalu dipanggil atau hanya jika tes berhasil?
Konstruksi pengelompokan menambahkan tingkat redundansi yang membantu Anda menemukan kesalahan ketika Anda secara otomatis indentasi kode Anda. Di C, kode yang setara dapat diindentasi otomatis sebagai berikut:
if (test(x))
foo(x);
bar(x);
Jika saya bermaksud bar
berada pada level yang sama dengan foo
, maka indentasi otomatis berdasarkan struktur kode biarkan saya melihat bahwa ada sesuatu yang salah yang dapat diperbaiki dengan menambahkan kawat gigi di sekitar foo
dan bar
.
Dalam Python: Mitos tentang Indentasi , ada contoh yang seharusnya buruk dari C:
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
Itu kasus yang sama seperti di atas, di Emacs, saya menyorot seluruh blok / fungsi, tekan Tab, dan kemudian semua kode dihidupkan kembali. Perbedaan antara lekukan manusia dan struktur kode memberi tahu saya ada yang tidak beres (itu dan komentar sebelumnya!).
Selain itu, kode perantara di mana lekukan dimatikan dalam C tidak membuatnya melalui cabang utama, semua cek gaya di tempat akan membuat GCC / Jenkins berteriak padaku. Saya baru-baru ini memiliki masalah yang mirip dengan yang dijelaskan di atas dalam Python, dengan pernyataan off oleh satu tingkat indentasi. Kadang-kadang saya memiliki kode dalam C yang melampaui penjepit penutupan, tetapi kemudian saya menekan Tab dan kode indentasi "salah": itu satu lagi kesempatan untuk melihat bug.
let x =1; y = 2; z = 3
sepenuhnya valid, sebagaimana adanyado { putStrLn $ show x; putStrLn $ show y; putStrLn $ show z; }
. Mereka tidak perlu berada di jalur yang sama.