Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Dekorator
Mengoptimalkan Dekorator
Tujuan
Kumpulkan bahan-bahan dan siapkan berbagai jenis pizza dengan menggunakan decorator.
Sekarang oven sudah siap, saatnya menyiapkan beberapa pizza sehingga kita dapat memasaknya nanti. Karena kita sudah tahu cara menggunakan decorator, kita bisa mengoptimalkannya sedikit. Dengan menggunakan simbol @ dalam kode diikuti dengan nama decorator dan meletakkan kode ini di atas fungsi yang didekorasi, kita bisa secara otomatis menambahkan decorator tanpa menggunakan variabel. Misalnya:
# Decorator
def create_pizza(func):
def set():
pizza = ["dough","red sauce","cheese"]
player.combine(pizza)
func()
return set
# Function being decorated with @
@create_pizza
def peperoni_pizza():
player.place("Peperoni")
player.speak("Peperoni Pizza has been prepped")
# Using pre-decorated function
peperoni_pizza()
Perlu dicatat, teknik ini menyederhanakan proses dengan memiliki fungsi yang sudah didekorasi sebelum digunakan, namun terkadang Anda mungkin masih ingin menetapkan decorator ke sebuah variabel untuk fleksibilitas yang lebih besar.
Untuk memulai, berjalanlah menuju tanda X emas dan ambil bahan-bahan untuk membuat pizza. Bahan-bahan untuk membuat pizza adalah: "cheese", "dough", "red sauce", "peperoni", "ham", "olive", "pepper", "onion" dan "pineapple". Sebagian besar bahan ini berada di dalam Matrix yang mewakili rak penyimpanan, gunakan List Comprehensions untuk menyimpan semua item yang ingin Anda ambil dalam sebuah list.
shelves = [ ["cheese", "dough", "jar"], ["jar", "red sauce", "jar"], ["peperoni", "jar" , "ham"], ["olive", "pepper", "onions"] ] ingredients = [ item for row in shelves for item in row if not "jar" in item]
Dalam kode di atas, list ingredients mengiterasi melalui baris-baris dalam Matrix yang bernama shelves dan menghapus semua item yang bernama "jar". List Comprehension ini menghemat waktu dari keharusan menambahkan semuanya secara manual. Gunakan fungsi speak() dengan list bahan untuk memverifikasi item yang akan Anda gunakan.
Setelah semua bahan dikumpulkan kecuali "pineapple", fungsi-fungsi untuk membuat pizza membutuhkan fungsi place() agar dapat berfungsi dengan maksimal. Fungsi-fungsi ini telah disiapkan di editor kode dan dinamai: peperoni_pizza() yang membutuhkan: "peperoni", vegetable_pizza() yang membutuhkan: "olive", "pepper", "onion", dan pineapple_pizza() yang membutuhkan: "ham" dan "pineapple".
Berjalanlah menuju tanda X yang gelap dan gunakan fungsi yang telah didekorasi untuk menyiapkan pizza. Di tanda X dengan karpet merah, buat peperoni_pizza(); di karpet hijau, buat vegetable_pizza(); dan di karpet kuning, buat pineapple_pizza(). Dalam perjalanan menuju karpet kuning, berhenti di tanda X yang terang, hadapi lemari, dan gunakan fungsi collect() untuk mengambil "pineapple". Siapkan semua pizza agar level dapat diselesaikan dengan sukses.