-
-
Notifications
You must be signed in to change notification settings - Fork 96
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: menambahkan materi tentang dekorator (#283)
* 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
Showing
4 changed files
with
119 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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_()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters