Ini benar-benar hanya pertanyaan teoretis oleh pemula python yang ingin lebih memahami.
Saya selalu lupa titik dua setelah blok pernyataan awal dengan python. Itulah yang saya maksud:
for <variable> in <sequence>:
if <blah blah>:
Pikiran saya adalah bahwa salah satu alasan saya terus lupa adalah, bahwa mereka secara implisit bersifat de-fakto: kolon atau tidak, pernyataan itu diakhiri dengan kalimat itu.
Pertanyaan saya - yang saya tanyakan untuk mempelajari bagaimana sintaksis python bekerja - adalah, apakah usus besar benar-benar tidak perlu? Apakah saya harus mengubah sintaksis python sehingga usus besar tidak lagi diperlukan, akankah ada yang pecah? Apakah itu membuat beberapa pernyataan ambigu atau tidak mungkin?
if
,else
,while
dan sebagainya. Jika Anda melakukan itu, apakah python masih menjadi bahasa yang dapat digunakan tanpa ambiguitas?if .. then .. end
dalam satu baris. Jadi di sini di pythonthen
diganti dengan dua hal:
dan baris baru yang diperlukan. Salah satunya tampak berlebihan.Jawaban:
Ya, titik dua diperlukan untuk mendisambiguasikan konstruksi tertentu. Pertimbangkan, misalnya
if x - y < z: pass
,. Tanpa titik dua kita tidak bisa memutuskan bagaimana mengurai ini tanpa mengetahui konteks apa x, y, dan z.if x: -y < z...
valid jika x adalah boolean,if x - y < z:
valid sebaliknya.Karena itu adalah ide yang sangat bagus untuk bahasa pemrograman untuk tidak mengharuskan Anda untuk menjalankan aplikasi sampai titik yang Anda kompilasi untuk dapat menguraikannya, titik dua sangat diperlukan. Anda bisa menjatuhkannya, tetapi Anda perlu cara lain untuk membuat ambigu.
sumber
if condition: print("Condition passed")\n
diizinkan? The\n
melambangkan baris baru setelah pernyataan cetak.Kolon tidak benar-benar diperlukan secara tata bahasa, seandainya Python dirancang di dunia yang berbeda, cukup mungkin bahwa perancang bahasa mungkin tidak memutuskan untuk meminta usus besar. Dan memang bahasa seperti Cobra melakukan ini.
Alasan utama mengapa usus besar diperlukan dalam python adalah keterbacaan manusia. Mengutip dari Python FAQ :
Seperti yang juga disebutkan dalam FAQ, titik dua juga memudahkan untuk memproses kode python tanpa sepenuhnya menguraikan bahasa. Prosesor teks apa pun yang memiliki parser lengkap penuh, termasuk python compiler, dapat melakukannya tanpa titik dua jika itu tidak diperlukan atau jika itu dibuat opsional ketika tidak ambigu.
sumber
Itu tidak perlu untuk komputer, tetapi untuk manusia.
Guido van Rossum (pencipta Python) memiliki blog sejarah Python untuk sementara waktu. Usus besar diperkenalkan di ABC , sumber dari banyak fitur Python.
Dalam posting blog ini di "Karin Dewar, Indentation and the Colon" , Guido menulis:
( B di sini adalah serangkaian bahasa prototipe B0, B1, ... yang mengarah ke ABC. Ini bukan bahasa B yang merupakan pendahulu dari C).
Saya juga ingat Guido menunjukkan di tahun 90-an bahwa itu untuk kepentingan editor , yang secara otomatis dapat memasukkan indent setelah garis yang berakhir dengan titik dua. Tetapi saya belum menemukan sumber untuk itu.
sumber
The Cobra Bahasa Pemrograman 's sintaks ini sangat terinspirasi oleh Python, dan itu tidak jauh dengan usus besar, sehingga tampaknya itu tidak benar-benar diperlukan. Namun, itu tidak cukup untuk hanya menghilangkan titik dua, ada perubahan lain pada sintaks yang diperlukan. Lihat, misalnya potongan kode ini dari salah satu proyek mainan saya :
Tanpa titik dua untuk memisahkan tubuh dari daftar parameter, saya harus menggunakan indentasi:
Saya percaya versi Cobra sebelumnya yang menjadikan usus besar opsional, Anda bisa menggunakan lekukan atau titik dua atau keduanya. Mirip dengan cara kerjanya di Ruby, di mana ada kata kunci untuk memisahkan berbagai bagian dari ekspresi kontrol, tetapi Anda juga dapat menggunakan pemisah ekspresi (titik koma atau baris baru):
Di versi Cobra saat ini, Anda dapat menggunakan koma:
dapat ditulis sebagai
Anda memerlukan beberapa cara untuk memisahkan berbagai bagian dari ekspresi atau definisi kontrol. Dalam Python, itu adalah titik dua. Jika Anda menghapus titik dua, Anda perlu menggantinya dengan sesuatu yang lain, misalnya indentasi paksa . Hanya dengan menghilangkan titik dua tidak akan bekerja.
Satu-satunya cara untuk benar-benar yakin adalah memformalkan sintaksis dengan dan tanpa titik dua dan membuktikan ketidak-ambiguannya.
Namun, perhatikan bahwa salah satu aforisme Zen Python adalah "Eksplisit lebih baik daripada Implisit", sehingga penggambaran eksplisit blok dengan titik dua tampaknya cocok dengan filosofi umum Python. The Desain dan Sejarah FAQ juga menyebutkan bahwa keputusan ini didasarkan pada bukti empiris dari pendahulunya Python, ABC.
sumber