Apa itu decorator di python dan contoh implementasinya

 

apa-itu-decorator-di-python-dan-implementasinya

Apa itu decorator di python dan implementasinya - Selamat malam sobs-sobs ku sekalian semoga kalian pada sehat walafiat jasmani dan rohani dan masih diberi kenikmatan untuk menghirup udara pagi, pada kesempatan kali ini gua akan share masih seputar si dede gemezz (python).

mungkin sobs-sobs jika pertama kali mempelajari python tentu sangat asing tentang kata decorator, apa maksudnya dan fungsinya. sama seperti gua dahulu sobs-sobs sangat asing, karena gua kepo akhirnya gua pelajari dengan mencari refrensi sana sini dan materi ini termasuk dalam kategori materi fundamental atau dasar.

kenapa gua nulis ? untuk mencegah agar lupa tentang pemahaman materi ini gua putuskan untuk menuliskannya, yang perlu diperhatikan sobs-sobs sekalian untuk memahami materi ini sebaiknya sobs-sobs membaca tentang materi Mengenal Python Closure dan implementasinya karena materi ini memiliki kolerasi. kita lanjut saja ke pembahasan materinya.

Penjelasan

decorator adalah sebuah fitur dipython dimana sebuah fungsi dapat dijadikan sebagai parameter untuk fungsi lainnya hanya dengan menggunakan syntax @. jadi begini sobs-sobs decorator itu adalah sebagai pembungkus atau fungsi induk untuk fungsi lainnya. analogi sederhananya adalah seperti sebuah kado dimana bungkus kado adalah sebuah fungsi decorator dan isi kadonya merupakan fungsi yang terdekorasi. ya supaya memudahkan dibawah ini gambar yang sudah gua buat sobs.

Analogi decorator
Ya mungkin sobs-sobs ada yang masih bingung, tidak apa-apa sobs-sobs perlahan hal ini sama seperti gua saat pertama kali mempelajari materi ini. 

kita akan beranjak ke implementasinya.

Implementasinya

agar menjadi gambaran sobs-sobs berikut ini gua buat contoh sesederhana mungkin. 


def dekorator(fnc):
    def dekorator_dalam():
        print("fungsi dekorator nih, senggol dong")
        # jalankan fungsi terdekorasi
        fnc()
        
    # jalankan fungsi dekorator_dalam
    dekorator_dalam()



@dekorator    
def terdekorasi():
    print("fungsi terdekorator nih, tendang dong")


Berikut ini penjelasannya : 

- fungsi dekorator : adalah fungsi yang berperan menjadi fungsi dekorator, jika sobs ingin menjadikan fungsi sebagai fungsi dekorator maka setidaknya minimal mempunyai satu parameter yang digunakan untuk menampung sebuah fungsi dalam case diatas fungsi terdekorasi yang akan ditampung ke dalam parameter fnc. fungsi ini juga wajib menjalankan atau mereturn fungsi dekorator_dalam.

- fungsi dekorator_dalam : adalah fungsi dimana didalamnya menjalankan atau mengeksekusi sebuah fungsi yang terdekorasi. contoh diatas fnc() dieksekusi.

- fungsi terdekorasi : adalah fungsi yang berperan sebagai parameter untuk fungsi dekorator, catatan jika kita ingin menjadikan sebuah fungsi berperan sebagai fungs yang terdekorasi maka wajib menambahkan symbol @ dan diikuti dengan nama fungsi dekoratornya, contoh diatas yaitu @dekorator

dan jika script diatas dijalankan maka outputnya akan seperti dibawah ini sobs :

output-fungsi-decorator-contoh-1

mungkin yang menjadi pertanyaan sobs-sobs kok script diatas bisa langsung mengeksekusi padahal script diatas tidak ada sama sekali untuk menjalankan perintah fungsi apapun ?

Yap, jika seperti itu yang ada dibenak sobs-sobs sekalian maka sama saat pertama kali gua belajar.
jika kita menggunakan symbol @ untuk fungsi dekorator tapi fungsi dekoratornya tidak mereturn fungsi dekorator_dalam maka interpreter python langsung mengeksekusi fungsi terdekorasi. bisa lihat script diatas bahwa fungsi terdekorasi tidak mereturn tapi langsung menjalankan fungsi dekorator_dalam. untuk lebih jelas gua akan buat contoh fungsi dekorator yang mereturn fungsi dekorator_dalam.


def dekorator(fnc):
    def dekorator_dalam():
        print("fungsi dekorator nih, senggol dong")
        # jalankan fungsi terdekorasi
        fnc()
        
    # return fungsi dekorator_dalam
    return dekorator_dalam



@dekorator    
def terdekorasi():
    print("fungsi terdekorator nih, tendang dong")
    
    
# eksekusi fungsi terdekorasi
terdekorasi()


Oke perhatikan script diatas sobs-sobs terutama difungsi dekorator, dimana kali ini fungsi dekorator mereturn fungsi dekorator_dalam sehingga jika kita harus mengeksekusi fungsi terdekorasi agar supaya program dapat berjalan.

Lah kok yang dieksekusi fungsi yang terdekorasi bukan fungsi dekoratornya ?

Oke jika pertanyaan sobs-sobs seperti itu maka gua akan lampirkan gambar dibawah ini sobs sebagai gambaran apa yang sebenarnya terjadi.

alur-eksekusi

Penjelasannya jika kita mengeksekusi fungs yang terdekorasi sama saja kita menjalankan fungsi dekoratornya, karena sebenarnya fungsi yang terdekorasi merupakan parameter untuk fungsi dekorator.

lalu gimana bang jika kita ingin agar fungsi terdekorator mempunyai parameter ?

oke gua akan buat contoh simple sobs-sobs sekalian.


def tampilkan_hasil(fnc):
    # fungsi dekorator_dalam dengan parameter
    def dekorator_dalam(x, y):
        hasil = fnc(x, y)
        print('-' * 30)
        print("Hasil : " + str(hasil))
        print('-' * 30)
    
    # return fungsi dekorator_dalam
    return dekorator_dalam
    
    
@tampilkan_hasil def perkalian(angka1, angka2): return angka1 * angka2 # eksekusi fungsi perkalian perkalian(10, 20)

dan jika dieksekusi maka outputnya akan seperti dibawah ini sobs-sobs.

output-contoh-decorator-2

Jika fungsi terdekorasi mempunyai parameter contoh diatas fungs perkalian maka kita wajib juga menuliskan parameter di fungsi dekorator_dalam contoh variabel x dan y merupakan variabel untuk menampung parameter fungsi perkalian.

gua akan buat contoh lagi sobs-sobs supaya kita semua mengerti.


def tampilkan_hasil(fnc):
    # fungsi dekorator_dalam dengan parameter
    def dekorator_dalam(x, y, o):
        hasil = None
        
        if o == "bagi":
            if y == 0:
                raise Exception("Pembagi tidak boleh 0")
        
        hasil = fnc(x, y, o)
        
        if hasil is None:
            raise Exception("Operator tidak diketahui")
        else:
            print('-' * 40)
            print(f"Hasil dari {o} ({x} dan {y}) : {hasil}".center(40))
            print('-' * 40)
    
    # return fungsi dekorator_dalam
    return dekorator_dalam
    
    
    
@tampilkan_hasil
def operasi_artimatika(angka1, angka2, operator):
    result = None
    if operator == "kali":
        result = angka1 * angka2

    if operator == "bagi":
        result = angka1 / angka2

    if operator == "tambah":
        result = angka1 + angka2
    
    if operator == "kurang":
        result = angka1 - angka2
    
    return result 


# eksekusi fungsi operator_aritmatika
operasi_artimatika(20, 5, "kali")

Yang perlu diperhatikan adalah fungsi dekorator_dalam sobs, dimana jumlah parameter difungsinya harus menyesuaikan dengan jumlah parameter terdekorasi contoh diatas fungsi aritmatika mempunyai 3 parameter maka kita harus menaruh juga sebanyak 3 parameter di fungsi dekorator_dalam contoh diatas yaitu x untuk angka1, y untuk angka2, dan o untuk operator. dan selanjutnya pada saat eksekusi fungsi terdekorasi semua parameter harus disertakan sebagai contoh diatas adalah hasil = fnc(x, y, o)

Dan jika dieksekusi hasilnya seperti dibawah ini sobs

ouput-decorator-contoh-3



Sekarang kita eksekusi program yang pasti akan error, sesuai dengan kondisi yang sudah kita terapkan didalam fungsi dekorator_dalam.


operasi_artimatika(20, 0, "bagi")

Maka outputnya seperti dibawah ini

error-decorator-1


Eksekusi lainnya

operasi_artimatika(20, 5, "sruputkode")

Ouputnya

error-decorator-contoh-2



Oke contoh diatas mengakhiri pembahasan kita pada materi decorator python sobs, jika sobs-sobs ada yang kurang dimengerti silahkan sobs-sobs mencari refrensi ditempat lain atau dengan bertanya dikolom komentar.



See you next time.


Posting Komentar untuk "Apa itu decorator di python dan contoh implementasinya"