Langsung ke konten
KamusNgoding
Mahir Python 1 menit baca

Advanced Python: Membongkar Cara Kerja Decorator untuk Kode yang Lebih Fungsional

#python #decorator #advanced python #functional programming #python-lanjutan

Advanced Python: Membongkar Cara Kerja Decorator untuk Kode yang Lebih Fu

Fungsional

Pendahuluan

Pernah lihat kode Python dengan simbol @ di atas definisi fungsi dan bert bertanya-tanya apa maksudnya? Itulah decorator — salah satu fitur Python ya yang paling powerful sekaligus paling sering disalahpahami.

Decorator bukan sekadar “sintaks manis” (syntactic sugar). Di balik simbol  @ tersebut tersembunyi konsep functional programming yang dalam: fungsi y yang membungkus fungsi lain untuk mengubah atau memperluas perilakunya tanp tanpa menyentuh kode aslinya.

Di artikel ini, kita akan membedah decorator dari akar: mulai dari konsep * first-class function, membangun decorator dari nol, hingga pola-pola lanj lanjutan yang dipakai di codebase produksi seperti logging otomatis, cachin caching, dan validasi input.


Memahami Function sebagai First-Class Object

Sebelum masuk ke decorator, kita harus paham satu prinsip dasar Python: **f fungsi adalah objek.

Artinya, fungsi bisa:

  • Disimpan ke dalam variabel
  • Dikirim sebagai argumen ke fungsi lain
  • Dikembalikan sebagai nilai balik dari fungsi lain
# Fungsi bisa disimpan ke variabel
def sapa(nama):
    return f"Halo, {nama}!"

ucapan = sapa          # bukan sapa(), kita menyimpan fungsinya sendiri
print(ucapan("Budi"))  # Output: Halo, Budi!

# Fungsi bisa dikirim sebagai argumen
def jalankan(func, nilai):
    return func(nilai)

print(jalankan(sapa, "Sari"))  # Output: Halo, Sari!

Konsep ini disebut first-class function. Tanpa memahami ini, decorator ak akan terasa seperti sihir.

Selanjutnya, kita perlu mengenal closure — fungsi yang “mengingat” variab variabel dari scope di mana ia dibuat:

def buat_pengali(faktor):
    def kali(angka):
        return angka * faktor   # 'faktor' diingat dari scope luar
    return kali

kali_tiga = buat_pengali(3)
kali_lima = buat_pengali(5)

print(kali_tiga(10))  # Output: 30
print(kali_lima(10))  # Output: 50

Fungsi kali adalah closure — ia mengingat nilai faktor meskipun

Artikel Terkait