Developer Python Memperdebatkan Sintaks Singkat untuk Keyword Arguments Mengikuti Best Practices Dataclass

Tim Komunitas BigGo
Developer Python Memperdebatkan Sintaks Singkat untuk Keyword Arguments Mengikuti Best Practices Dataclass

Diskusi terbaru tentang best practices dataclass Python telah memicu perdebatan komunitas yang lebih luas mengenai penanganan keyword arguments dalam bahasa pemrograman ini dan kebutuhan akan sintaks yang lebih ringkas. Percakapan dimulai dengan rekomendasi untuk menggunakan keyword-only arguments dalam dataclass namun dengan cepat berkembang menjadi pemeriksaan yang lebih mendalam tentang verbositas Python dibandingkan dengan bahasa pemrograman lainnya.

Perbandingan Sintaks Keyword-Only Dataclass Python

Dataclass tradisional:

@dataclass
class MyDataClass:
    x: int
    y: str
    z: bool = True

Dataclass keyword-only (direkomendasikan):

@dataclass(kw_only=True)
class MyDataClass:
    x: int
    y: str
    z: bool = True

Perbedaan penggunaan:

  • Tradisional: MyDataClass(1, 'foo', False)
  • Keyword-only: MyDataClass(x=1, y='foo', z=False)

Masalah Verbositas

Developer Python semakin frustrasi dengan sifat repetitif keyword arguments, terutama ketika nama variabel sama persis dengan nama parameter. Persyaratan saat ini untuk menulis function(x=x, y=y, z=z) terasa terlalu bertele-tele bagi banyak programmer yang telah mengalami solusi yang lebih elegan di bahasa lain.

Sintaks shorthand property JavaScript telah menjadi titik iri khusus di antara developer Python . Di JavaScript , developer dapat dengan mudah menulis {x, y, z} alih-alih {x: x, y: y, z: z} ketika nama property cocok dengan nama variabel. Fitur ini secara signifikan mengurangi pengulangan kode dan meningkatkan keterbacaan.

Upaya Solusi yang Gagal

Komunitas Python telah mencoba mengatasi masalah ini melalui jalur resmi. PEP 736 mengusulkan sintaks singkat menggunakan notasi fn(x=, y=, z=), namun proposal ini akhirnya ditolak. Banyak developer merasa lega dengan penolakan ini, merasa sintaks yang diusulkan canggung dan tidak memberikan solusi elegan yang mereka harapkan.

Dari tampilannya, perasaan yang saya dapatkan adalah bahwa proposal sintaks yang layak dan nyaman telah di-bikeshed sampai ditolak.

Beberapa pendekatan alternatif telah disarankan oleh anggota komunitas. Ada yang mengusulkan menggunakan sintaks seperti OCaml dengan notasi tilde, sementara yang lain menyarankan pendekatan prefix semicolon ala Julia . Namun, tidak ada alternatif ini yang mendapat traksi signifikan atau pertimbangan resmi.

Solusi Sintaks Singkat Python yang Diusulkan

Bahasa Sintaks Saat Ini Sintaks Singkat Status
JavaScript {x: x, y: y, z: z} {x, y, z} Tersedia
Python (PEP 736) fn(x=x, y=y, z=z) fn(x=, y=, z=) Ditolak
Gaya OCaml fn(x=x, y=y) fn(~x, ~y) Diusulkan
Gaya Julia fn(x=x, y=y) fn(;x, y) Diusulkan

Solusi sementara Python saat ini: f(**{x, y, z}) - Menggunakan dictionary unpacking tetapi kurang mudah dibaca

Workaround dan Solusi Saat Ini

Meskipun tidak ada sintaks shorthand native, developer Python telah menemukan workaround kreatif. Satu pendekatan melibatkan penggunaan dictionary unpacking dengan f(**{x, y, z}), meskipun sintaks ini tidak terlalu elegan dan bisa membingungkan untuk dibaca.

Komunitas juga telah mengadopsi TypedDict sebagai solusi untuk dokumentasi yang lebih baik dan dukungan IDE ketika berurusan dengan keyword arguments. Pendekatan ini membantu mengatasi beberapa pain point seputar penggunaan ** kwargs, terutama di library seperti boto3 di mana dokumentasi parameter secara historis buruk.

Perdebatan Filosofi yang Lebih Luas

Diskusi ini telah mengungkap ketegangan fundamental dalam filosofi desain Python . Beberapa developer berargumen bahwa preferensi Python untuk sintaks eksplisit dan ad-hoc daripada primitif yang dapat dikomposisi sedang mengarahkan bahasa ini menuju kompleksitas yang tidak perlu. Mereka khawatir bahwa Python mendekati situasi yang mirip dengan C++ , di mana sintaksnya menjadi sangat ekstensif sehingga sedikit developer yang memahaminya secara komprehensif.

Yang lain membela pendekatan Python saat ini, berargumen bahwa sintaks eksplisit dan cakupan standard library yang komprehensif mengurangi kebutuhan akan dependensi eksternal dan membuat kode lebih mudah dibaca dalam jangka panjang.

Kesimpulan

Meskipun pemicu langsung untuk diskusi ini adalah best practices dataclass, hal ini telah mengekspos kekhawatiran yang lebih dalam tentang evolusi dan desain sintaks Python . Komunitas tetap terbagi mengenai apakah Python membutuhkan sintaks yang lebih ringkas untuk pola umum atau apakah pendekatan eksplisit saat ini lebih baik melayani tujuan bahasa dalam hal keterbacaan dan maintainability. Seiring Python terus berkembang, perdebatan ini kemungkinan akan mempengaruhi keputusan desain bahasa di masa depan dan arah PEP yang akan datang.

Referensi: Tip: Use keyword-only arguments in Python dataclasses