Kumpulan perilaku mengejutkan dari Python telah memicu kembali diskusi tentang kualitas desain bahasa pemrograman, dengan para developer membandingkan keanehan Python dengan inkonsistensi JavaScript yang terkenal buruk. Proyek What the f*ck Python! menampilkan perilaku kode yang tidak terduga dan menantang asumsi developer tentang cara kerja Python di balik layar.
Identitas String vs Kesetaraan Menciptakan Kebingungan
Penanganan objek string oleh Python mengungkapkan detail implementasi yang dapat membingungkan developer. Ketika membuat string yang identik, Python terkadang menyimpannya sebagai objek yang sama di memori dan terkadang membuat objek terpisah. Hal ini menyebabkan hasil yang tidak terduga ketika menggunakan operator is
, yang memeriksa identitas objek daripada kesetaraan konten. Perilaku ini bergantung pada faktor-faktor seperti string interning dan cara string dibuat, membuatnya sulit diprediksi tanpa pengetahuan mendalam tentang internal Python.String interning: Teknik optimasi Python di mana string identik disimpan sekali di memori dan digunakan kembali
Keanehan Umum Python yang Dibahas:
- Masalah Identitas String:
"wtf" is "wtf"
mengembalikanTrue
, tetapi"wtf!" is "wtf!"
mungkin mengembalikanFalse
- Perbandingan Berantai:
False == False in [False]
dievaluasi menjadiTrue
karena rantai operator - Perilaku ID Objek: Hasil fungsi
id()
bergantung pada string interning dan masa hidup objek - Konversi Boolean:
bool("False")
mengembalikanTrue
karena string yang tidak kosong bersifat truthy
Perbandingan Berantai Menghasilkan Hasil yang Tidak Terduga
Salah satu perilaku paling mengejutkan melibatkan operator perbandingan berantai. Ekspresi False == False in [False]
mengevaluasi ke True
, yang tampak berlawanan dengan intuisi terlepas dari bagaimana Anda menguraikannya secara mental. Hal ini terjadi karena Python memperlakukan perbandingan berantai sebagai ekspresi boolean majemuk, secara efektif mengonversi pernyataan tersebut menjadi (False == False) and (False in [False])
. Meskipun fitur ini memungkinkan notasi matematis seperti 1 < x < 10
, hal ini dapat menciptakan kebingungan ketika diterapkan pada operator non-transitif.
Komunitas Terbagi dalam Kritik Bahasa
Diskusi ini telah mengungkapkan perpecahan tajam dalam cara developer memandang kritik bahasa. Beberapa berpendapat bahwa contoh-contoh ini mewakili kasus tepi yang jarang muncul dalam kode produksi, menekankan bahwa Python yang baik mengikuti konvensi yang telah ditetapkan dan jarang menggunakan fungsi seperti id()
. Yang lain berpendapat bahwa bahasa pemrograman harus diuji secara ketat seperti perangkat lunak lainnya, karena inkonsistensi dapat menyebabkan bug halus dalam aplikasi nyata.
Untuk bahasa yang digunakan secara luas seperti Python, kita harus mengujinya seperti tester QA. Semua inkonsistensi ini bertambah menjadi banyak bug ketika Anda mengharapkan sesuatu mengikuti pola yang konsisten dan ternyata tidak.
Poin-Poin Diskusi Utama:
- Dampak Produksi: Sebagian besar contoh menggunakan fungsi seperti
id()
yang jarang muncul dalam kode nyata - Desain Bahasa: Perdebatan mengenai apakah konsistensi atau keterbacaan yang harus diprioritaskan
- Kualitas Dokumentasi: Python kurang memiliki spesifikasi formal dibandingkan dengan bahasa pemrograman utama lainnya
- Perbandingan dengan JavaScript: Komunitas terpecah mengenai apakah Python layak mendapat kritik serupa seperti JS
Kekhawatiran Spesifikasi dan Dokumentasi
Perdebatan ini juga telah menyoroti kekhawatiran tentang kurangnya spesifikasi formal Python. Tidak seperti bahasa dengan spesifikasi detail yang memungkinkan implementasi independen, Python terutama bergantung pada CPython sebagai implementasi referensinya. Pendekatan ini berarti bahwa beberapa perilaku adalah detail implementasi daripada fitur bahasa yang dijamin, membuatnya lebih sulit bagi developer untuk memprediksi bagaimana kode akan berperilaku di berbagai implementasi Python.
Diskusi ini mencerminkan ketegangan yang lebih luas dalam desain bahasa pemrograman antara keterbacaan, konsistensi, dan kepraktisan implementasi. Meskipun filosofi desain Python menekankan keterbacaan kode dan produktivitas developer, contoh-contoh ini menunjukkan bahwa bahkan bahasa yang dirancang dengan baik dapat menunjukkan perilaku mengejutkan yang menantang model mental developer tentang bagaimana bahasa seharusnya bekerja.
Referensi: What the f*ck Python!