Skip to content

Commit

Permalink
feat: menambahkan materi tentang dekorator (#283)
Browse files Browse the repository at this point in the history
* feat: menambahkan materi tentang dekorator

Signed-off-by: slowy07 <slowy.arfy@gmail.com>

* update DIRECTORY.md

---------

Signed-off-by: slowy07 <slowy.arfy@gmail.com>
Co-authored-by: github-actions <bellshdae07@gmail.com>
  • Loading branch information
slowy07 and github-actions committed Jun 27, 2023
1 parent b36802a commit ac0b509
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 0 deletions.
81 changes: 81 additions & 0 deletions Basic/26_dekorator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Python Dekorator

Dalam python, Dekorator atau ``Decorator`` adalah pola desain dalam python yang memungkinkan pengguna menambahkan fungsi baru ke dalam objek yang sudah ada tanpa ada perubahan dalam strukturnya.
Dekorator biasanya dipanggil sebelum definisi dari fungsi yang ingin dibuat.

Python memperbolehkan penggunaan fungsi yang bercabang atau nested function untuk mengakses statement diluar dari fungsi yang dibuat, sebagai contoh

```python
def menampilkan_kata(pesan):
def kirim_pesan():
print(pesan)

kirim_pesan()

menampilkan_kata("bellshade")
```

dengan contoh diatas, kita bisa membuat dekorator yang sederhana yang merubah huruf besar menjadi huruf kecil

```python
# mendifinisikan fungsi bernama 'dekorator_huruf_kecil'
def dekorator_huruf_kecil(kata_besar):
# membuat fungsi nested yang kita sebut 'wrapper'
def wrapper():
# memanggil yang diteruskan dekorator_huruf_kecil
# dan kemudian dimasukkan ke dalam variabel
# 'kata_message'
kata_message = kata_besar()
# menggunakan fungsi 'lower()' untuk membuat
# variabel dari kata_message menjadi kecil
# dan kemudian ditugaskan dalam variabel
# buat_kata_kecil
buat_kata_kecil = kata_message.lower()
# mengembalikan nilai dari 'wrapper'
return buat_kata_kecil
# mengembalikan fungsi dari wrapper
return wrapper
```

kemudian disini kita bisa bisa menggunakan fungsi baru lagi dengan cara
```python
def kata():
return "BELLSHADE"

jadikan_kata_kecil = dekorator_huruf_kecil(kata)
jadikan_kata_kecil()
```

Python juga menyediakan cara yang lebih gampang dalam membuat kodingan diatas
dari yang kita buat dengan cara menambahkan simbol ``@``

```python
@dekorator_huruf_kecil
def kata():
return "BELLSHADE"
kata()
```

## Aplikasikan dekorator yang banyak dalam satu fungsi

Kita bisa menggunakan decorator yang banyak dalam satu fungsi sebagai contoh:

sebelumnya kita sudah membuat dekorator yang bernama ``dekorator_huruf_kecil`` kali ini kita membuat kata menjadi dipecah menggunakan fungsi ``split()``

```python
def pecah_kata(kata_yang_mau_dipecah):
def wrapper():
kata = kata_yang_mau_dipecah()
split_kata = kata.split()
return split_kata
return wrapper
```

dengan ini kita sudah ada 2 fungsi dekorator, kemudian kita bisa membuat contoh untuk memanggil keduanya dengan ``@``

```python
@dekorator_huruf_kecil
@pecah_kata
def kata():
return "BELLSHADE"
```
34 changes: 34 additions & 0 deletions Basic/26_dekorator/dekorator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
def dekorator_huruf_kecil(kata):
# membuat fungsi nested yang kita sebut 'wrapper'
def wrapper():
# memanggil yang diteruskan dekorator_huruf_kecil
# dan kemudian dimasukkan ke dalam variabel
# 'kata_message'
kata_message = kata()
# menggunakan fungsi 'lower()' untuk membuat
# variabel dari kata_message menjadi kecil
# dan kemudian ditugaskan dalam variabel
# buat_kata_kecil
buat_kata_kecil = kata_message.lower()
# mengembalikan nilai dari 'wrapper'
return buat_kata_kecil

# mengembalikan fungsi dari wrapper
return wrapper


def kata_besar():
return "BELLSHADE"


dekorator = dekorator_huruf_kecil(kata_besar)

print(dekorator() + "\n")


@dekorator_huruf_kecil
def kata_besar_():
return "BELLSHADE"


print(kata_besar_())
2 changes: 2 additions & 0 deletions Basic/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Untuk kamu yang ingin belajar bahasa pemrograman python, berikut urutan basic un
22. [Scope](22_scope)
23. [Kalkulator dengan Fungsi](23_kalkulator_dengan_fungsi)
24. [Casting Tipe Data](24_casting_tipe_data)
25. [list_and_dict](25_list_dict_comprehension)
26. [dekorator](26_dekorator)

## Install python pada perangkat

Expand Down
2 changes: 2 additions & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@
* 25 List And Dict Comprehension
* [Dict Comprehension](https://github.com/bellshade/Python/blob/main/Basic/25_list_and_dict_comprehension/dict_comprehension.py)
* [List Comprehension](https://github.com/bellshade/Python/blob/main/Basic/25_list_and_dict_comprehension/list_comprehension.py)
* 26 Dekorator
* [Dekorator](https://github.com/bellshade/Python/blob/main/Basic/26_dekorator/dekorator.py)
* [Introduction](https://github.com/bellshade/Python/blob/main/Basic/Introduction.py)

## Algorithm
Expand Down

0 comments on commit ac0b509

Please sign in to comment.