Membuat Fungsi Sendiri
Sejauh ini kamu memakai fungsi buatan orang lain. Sekarang giliranmu membuatnya, dan cara berpikirmu tentang program akan berubah.
Intisari
- Bentuknya:
def nama(parameter):, isinya menjorok ke dalam. - Menulis
deftidak menjalankan apa pun. Kode baru berjalan saat fungsinya dipanggil:nama(). returnmenyerahkan hasil ke pemanggil, sekaligus menghentikan fungsi di titik itu.print()menampilkan ke layar;returnmenghasilkan nilai. Keduanya bukan hal yang sama.- Fungsi tanpa
returnotomatis mengembalikanNone.
Masalah yang diselesaikan
# Kode yang sama ditulis tiga kali β kalau rumusnya salah, salahnya di tiga tempat
luas1 = 3.14 * 5 ** 2
luas2 = 3.14 * 7 ** 2
luas3 = 3.14 * 2 ** 2
def luas_lingkaran(jari):
return 3.14 * jari ** 2
luas1 = luas_lingkaran(5)
luas2 = luas_lingkaran(7)
luas3 = luas_lingkaran(2)
Rumusnya kini tinggal di satu tempat. Perbaiki di situ, seluruh program ikut benar.
Anatomi
def luas_lingkaran ( jari ) :
β β β βββ titik dua, wajib
β β ββββββββ parameter: nama untuk nilai yang masuk
β βββββββββββββββββββββ nama fungsi
βββββββββββββββββββββββββββββββ kata kunci "definisikan"
return 3.14 * jari ** 2
βββββββββ nilai yang diserahkan kembali ke pemanggil
Mendefinisikan β menjalankan. Baris def hanya mendaftarkan resepnya.
Tidak ada satu pun baris di dalamnya yang jalan sampai kamu menuliskan luas_lingkaran(5).
Kalau kodemu βtidak melakukan apa-apaβ, sering kali penyebabnya sesederhana: fungsinya lupa dipanggil.
Fungsi tanpa parameter, fungsi tanpa return
def sapa():
print("Halo!")
print("Selamat datang.")
sapa() # menjalankan kedua print di atas
Fungsi seperti ini melakukan sesuatu tapi tidak menghasilkan nilai. Kalau kamu memaksa mengambil hasilnya:
hasil = sapa()
print(hasil) # None
print versus return β beda yang paling sering dikacaukan
def tambah_print(a, b):
print(a + b) # menampilkan ke layar
def tambah_return(a, b):
return a + b # menyerahkan nilai
x = tambah_print(2, 3) # layar: 5
print(x * 2) # TypeError β x isinya None!
y = tambah_return(2, 3) # layar: kosong
print(y * 2) # 10
Aturan praktis: fungsi sebaiknya menghitung dan mengembalikan, bukan mencetak. Biarkan pemanggilnya yang memutuskan mau diapakan hasilnya β dicetak, disimpan, atau dihitung lagi. Fungsi yang langsung mencetak hanya berguna di satu situasi, sedangkan yang mengembalikan nilai berguna di mana saja.
return menghentikan fungsi
def cek_umur(umur):
if umur < 0:
return "Umur tidak valid" # keluar di sini juga
if umur < 17:
return "Belum dewasa"
return "Dewasa"
print(cek_umur(-5)) # Umur tidak valid
print(cek_umur(20)) # Dewasa
Begitu return tercapai, fungsi berhenti seketika β baris di bawahnya tidak dijalankan.
Sifat ini membuat else sering tidak diperlukan lagi, dan kodenya jadi lebih datar dan mudah dibaca.
Mengembalikan lebih dari satu nilai
def statistik(angka):
return min(angka), max(angka), sum(angka) / len(angka)
terendah, tertinggi, rata = statistik([80, 95, 67])
print(f"{terendah} - {tertinggi}, rata-rata {rata:.1f}")
Yang sebenarnya dikembalikan adalah satu tuple; baris kirinya membongkarnya jadi tiga variabel.
Satu fungsi, satu pekerjaan
# Buruk β satu fungsi mengerjakan tiga hal sekaligus
def proses():
data = input("Masukkan nilai: ")
nilai = int(data)
if nilai >= 70:
print("Lulus")
else:
print("Gagal")
# Baik β masing-masing bisa diuji dan dipakai ulang sendiri
def minta_nilai():
return int(input("Masukkan nilai: "))
def status(nilai):
return "Lulus" if nilai >= 70 else "Gagal"
print(status(minta_nilai()))
Ukuran praktisnya: kalau kamu kesulitan memberi nama pada sebuah fungsi, biasanya karena ia mengerjakan lebih dari satu hal. Nama yang mengandung βdanβ adalah tanda bahaya.
Latihan: tulis empat fungsi β luas_persegi, luas_lingkaran,
luas_segitiga, dan keliling_lingkaran. Semuanya mengembalikan nilai,
tidak ada yang mencetak. Lalu buat satu menu di bawahnya yang memanggil fungsi sesuai pilihan pengguna.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.