Function
Pada subbab 2A, kamu telah mempelajari cara untuk mengulangi suatu blok program baik melalui iterasi urutan data maupun dengan kondisi Boolean. Namun, perulangan blok program terjadi langsung sesuai dengan definisi yang dibuat. Contohnya:
Berarti, pencetakan nilai variabel i
akan dilakukan sebanyak 5 kali dengan nilai i
berupa Integer 0, 1, 2, 3, dan 4. Pencetakan nilai variabel tersebut akan dilakukan oleh Python secara langsung dan berurutan dari awal sampai akhir. Lalu, apa yang harus dilakukan apabila kita menginginkan program tersebut berulang di beberapa tempat berbeda? Ya, sebenarnya kamu bisa saja menyalin blok tersebut ke tempat yang diinginkan. Namun, kamu sebenarnya bisa menggunakan fungsi.
Dalam pemrograman, fungsi adalah suatu blok program yang memiliki sebuah signature (terdiri atas nama fungsi beserta argumen-argumennya) dan dapat dipanggil berulang-ulang oleh program melalui signature tersebut. Selama ini, kita sebenarnya sudah menggunakan banyak fungsi, seperti print()
, eval()
, dan abs()
. Fungsi sering digunakan untuk mempermudah pemrograman karena dapat dipakai berulang-ulang di tempat berbeda (reusable) dan pengguna fungsi tersebut tidak perlu mengetahui apa yang terjadi di balik fungsi tersebut dan hanya mengetahui signature dari program tersebut beserta tujuannya (encapsulation). Contohnya, ketika kamu menggunakan fungsi print()
, kamu hanya mengetahui cara memanggil fungsi tersebut dan keluaran yang dihasilkan. Kamu tidak perlu mengetahui apa yang dilakukan oleh fungsi tersebut untuk mencetak hasil yang kamu inginkan.
Selain menggunakan fungsi yang disediakan oleh Python, kamu dapat mendefinisikan sendiri fungsi-fungsi yang kamu inginkan dalam program kamu. Secara umum, fungsi dalam Python dapat didefinisikan dengan cara berikut:
Dalam matematika, kamu mungkin telah mengenal fungsi-fungsi seperti f(x)
dan g(x)
. Misalnya, kita mendefinisikan sebuah fungsi f(x)
= 2x + 1. Setiap nilai x yang kamu berikan, misalnya 8 atau 10, akan menghasilkan nilai yang berbeda (17 dan 21). Fungsi tersebut dapat kamu definisikan dengan program berikut ini:
Kamu mungkin menyadari bahwa kata kunci yang digunakan adalah def
, singkatan dari "define". Artinya, kamu baru melakukan definisi dari fungsi tersebut. Fungsi tersebut tidak akan dijalankan sampai kamu memanggilnya menggunakan signature yang dibuat (nama fungsi dan argumennya). Misalnya:
Hasilnya adalah:
Penjelasan:
- Ketika kamu memanggil fungsi
f(8)
, artinya kamu memanggil fungsif
tadi dengan argumen 8. Nilai 8 tersebut akan diberikan ke variabel x sesuai definisi dan dapat digunakan dalam fungsi tersebut. - Fungsi
print()
yang ada di dalam definisi fungsi tadi dijalankan dengan x bernilai 8. - Ketika kamu memanggil fungsi
f(10)
, kamu memanggil fungsif
tadi, kali ini dengan nilai x berupa Integer 10. Fungsiprint()
akan dijalankan dengan nilai 10 tersebut.
print()
vs return
Cobalah untuk menjalankan program di bawah ini:
Apa hasilnya? Apakah sesuai dengan ekspektasi kamu? Kamu akan disambut dengan error berikut ini ketika kamu berusaha menghitung hasil dari y:
Loh, kok NoneType? Bukannya seharusnya Integer ya? Nah, di sinilah kamu harus mulai berkenalan dengan kata kunci return
dan bedanya dengan fungsi print()
. Fungsi print()
hanya bertujuan untuk mencetak sesuatu ke layar. Fungsi seperti ini disebut fungsi void, yaitu fungsi yang tidak mengembalikan apapun kepada pemanggilnya. Sehingga, ketika kamu memanggil f(3)
+ 2, Python akan mencetak hasil pemangkatannya ke layar (9) namun operasi penjumlahan tersebut tidak mendapatkan apapun (None). Di sisi lain, kata kunci return
akan memerintahkan Python untuk mengembalikan nilai yang diinginkan kepada pemanggilnya. Contohnya:
Kali ini, hasil dari pemangkatannya tidak dimunculkan ke layar. Namun, hasil dari y dapat dicetak ke layar:
Penjelasan:
- Operasi matematika
f(3)
+ 2 akan dievaluasi oleh Python di mana Python akan memanggilf(3)
dengan harapan mendapatkan suatu nilai untuk dijumlahkan. - Fungsi
f(3)
akan mengembalikan nilai kuadrat dari 3 (9) ke pemanggilnya, yaitu operasi matematika tadi. - Operasi matematika tadi akan menghasilkan 11 dan menyimpannya di variabel y.
Perlu diketahui bahwa ketika return
dijalankan, semua kode di dalam blok fungsi tersebut yang belum dijalankan (berada di bawah return
) tidak akan dijalankan.
Argumen Fungsi
Dalam pemrograman, sebuah fungsi dapat memiliki argumen atau tidak memiliki argumen. Contohnya:
Pada program di atas, perilaku dari fungsi alarm
tidak mengalami perubahan apapun sehingga semua pemanggilan fungsi alarm()
akan menghasilkan keluaran yang sama.
Mari kita ambil sebuah contoh fungsi di bawah ini:
Ada dua cara untuk menggunakan argumen dalam sebuah fungsi Python:
Positional Argument: Pemberian argumen dilakukan berdasarkan posisinya.
Contoh:
power(2,3)Sehingga, nilai x nanti adalah 2 dan nilai y adalah 3.
Keyword Argument: Pemberian argumen dilakukan berdasarkan variabel yang didefinisikan.
Contoh:
power(y=2,x=3)Sehingga, meskipun posisinya terbalik, nilai x tetap 3 dan nilai y tetap 2.
Pada umumnya, kamu dapat menggunakan dua cara ini secara bersamaan. Namun, ada beberapa kasus di mana kamu hanya dapat menggunakan salah satunya. Salah satunya adalah penggunaan infinite positional argument seperti berikut ini:
Pada fungsi ini, item
merupakan infinite positional argument yang mengumpulkan semua argumen posisional yang diberikan menjadi sebuah Tuple. Karena setelahnya ada argumen pemisah
, maka argumen tersebut harus berbentuk keyword karena tidak akan ada sisa argumen setelah dikumpulkan oleh item tadi.
Untuk membuat sebuah infinite positional argument, beberapa hal ini harus diperhatikan:
- Argumen ditandai dengan karakter ‘*’ sebelum deklarasi nama argumennya.
- Dalam satu fungsi, hanya satu argumen boleh berbentuk infinite positional argument.
- Tidak boleh ada positional argument setelahnya.
- Tidak boleh menggunakan keyword argument.
Nilai Default
Untuk menggunakan infinite positional argument dengan argumen lainnya di belakangnya, keyword argument tersebut harus memiliki nilai default sehingga dapat digunakan apabila argumen tidak tersedia. Hal ini sebenarnya berlaku untuk semua tipe argumen di mana ada sebuah nilai default yang dapat digunakan sewaktu-sewaktu tidak diberikan. Contohnya:
Coba kamu panggil fungsi tersebut seperti berikut ini:
Pada pemanggilan kedua dan keempat, meskipun kita hanya memberikan 1 argumen untuk diberikan kepada x, nilai y tetap akan terdefinisi karena memiliki nilai default 1.
Coba cari hasil dari program-program di bawah ini: