Kursus Pengembangan Python Lanjutan
Bab
>
Tingkat
Fungsi Lanjutan
Penutupan
Tujuan
Mengatur pasokan air di peternakan dengan menyiapkan dan menggunakan closures.
Terdapat empat tangki air yang dirancang untuk mengairi lahan pertanian di sekitarnya, sudah waktunya mereka diubah sehingga jumlah air yang tepat dapat didistribusikan ke tempat yang sesuai. Untuk melakukan ini, kita bisa mempermudah pekerjaan dengan menggunakan Closures.
Closures adalah fungsi bersarang yang dirancang untuk mengenkapsulasi data, hal ini mengurangi jumlah variabel yang perlu kamu gunakan dan menyembunyikan data di dalam fungsi agar tidak dapat dimanipulasi secara eksternal, dengan kata lain, menutup fungsi tersebut.
Untuk mengatur air di dalam tangki, kita akan membuat fungsi bersarang yang bekerja sebagai pengali. Fungsi ini bekerja dengan cara yang sama seperti loop, fungsi luar bernama multiplier_of() memiliki argumen yang dikalikan dengan argumen dari fungsi dalamnya yang bernama multiplier().
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
Setelah disiapkan, kita perlu menutup fungsi dengan membuat closures, ini mencegah akses ke nilai-nilainya dan memperkuat penggunaannya.
# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]
Closure di atas dinamai multiply_by_2() dan menggunakan fungsi bersarang yang kita buat dengan argumen yang telah ditetapkan, yaitu 2, yang merupakan angka yang digunakan oleh closure untuk mengalikan. Akibatnya, angka apapun yang kita tambahkan sebagai argumen akan dikalikan dengan dua (2) dan atribut ini tidak dapat diubah karena sudah tertutup.
Beranjak ke pengaturan tangki air, siapkan tiga (3) closures: multiply_by_2, multiply_by_3 dan multiply_by_5. Atur masing-masing secara manual menggunakan format yang sama seperti contoh yang telah diberikan sebelumnya, seperti ini: multiply_by_2 = multiplier_of(2).
Ada sebuah konstanta dictionary di level ini bernama tanks, sebagai indeksnya menampung enam (6) warna: "red", "blue", "orange", "purple", "yellow" dan "green". Setiap indeks menyimpan sebuah angka yang mewakili seberapa banyak air yang mengalir melalui sisi tangki, angka ini akan digunakan untuk mengatur tangki dengan menggunakan closures "multiply_by" yang telah dibahas sebelumnya.
Untuk memfasilitasi hal ini, sebuah fungsi akan disiapkan di editor bernama regulate_water(), yang mengambil dua argumen: warna yang mewakili indeks-indeks yang disebutkan di atas dan multiplier yang merupakan closure pengali yang akan digunakan. Contoh penggunaan fungsi adalah sebagai berikut: regulate_water("red", multiply_by_2).
Berjalanlah ke atas karpet berwarna yang ditandai dengan tanda X gelap di atas dan hadapi tangki-tangki tersebut, gunakan fungsi regulate_water() dan atur warna karpet sebagai argumen pertama dan closure pengali yang sesuai sebagai argumen kedua. Pengali yang akan digunakan pada setiap karpet berwarna adalah sebagai berikut:
multiply_by_2 - "red" dan "green" multiply_by_3 - "blue" dan "purple" multiply_by_5 - "orange" dan "yellow"
Aturlah aliran air di setiap sisi tangki untuk menyelesaikan level ini.