ngodingdulu
Dasar PemrogramanTutorialPemula

Function di Python: Memecah Masalah Jadi Kecil

Kode yang dipakai berulang kali sebaiknya ditulis sekali dan diberi nama. Function membuat program lebih pendek, lebih mudah dibaca, dan lebih mudah diperbaiki.

Oleh Afa Hernandes5 menit baca

Daftar isi

Bayangkan kamu menulis program kasir. Rumus “harga × jumlah, dikurangi diskon kalau belanja di atas Rp50.000” dipakai di lima tempat. Suatu hari aturan diskonnya berubah, dan kamu harus mencari serta mengganti kelima tempat itu, berharap tidak ada yang terlewat.

Function menyelesaikan masalah ini. Kamu menulis rumusnya sekali, memberinya nama, lalu memanggil nama itu di mana pun rumus itu dibutuhkan. Kalau aturannya berubah, cukup ubah di satu tempat.

Lebih dari itu, function adalah cara berpikir: memecah masalah besar menjadi bagian kecil yang masing-masing punya satu tugas jelas. Prinsip yang sama dipakai saat membangun aplikasi dengan AI, satu fitur sekali jalan. Semua contoh di tutorial ini diuji dengan Python 3.13.

Membuat dan memanggil function

Function dibuat dengan kata def, diikuti nama, tanda kurung, dan titik dua. Isinya menjorok ke dalam, sama seperti blok if dan for:

sapa.py
def sapa():
print("Halo!")
print("Selamat belajar Python.")
sapa()
sapa()
Output
Halo!
Selamat belajar Python.
Halo!
Selamat belajar Python.

Mendefinisikan function tidak menjalankannya. Kode di dalamnya baru berjalan saat function itu dipanggil dengan namanya diikuti tanda kurung: sapa().

Parameter: data yang dimasukkan

Function lebih berguna kalau bisa menerima data. Data itu ditulis sebagai parameter di dalam tanda kurung:

sapa_nama.py
def sapa(nama):
print(f"Halo, {nama}!")
sapa("Sari")
sapa("Budi")
Output
Halo, Sari!
Halo, Budi!

nama adalah parameter, semacam variabel yang isinya diberikan oleh pemanggil. Nilai yang dimasukkan saat memanggil ("Sari", "Budi") disebut argumen.

return: hasil yang dikembalikan

Ini konsep yang paling penting, dan paling sering membingungkan pemula. print() hanya menampilkan sesuatu di layar. return mengembalikan nilai ke pemanggil, supaya bisa disimpan dan diolah lagi:

total.py
def hitung_total(harga, jumlah):
return harga * jumlah
kopi = hitung_total(18000, 2)
roti = hitung_total(12000, 3)
semua = kopi + roti
print(kopi, roti, semua)
Output
36000 36000 72000

Karena hitung_total mengembalikan angka, hasilnya bisa dijumlahkan menjadi semua. Coba bandingkan dengan versi yang memakai print:

print_vs_return.py
def hitung_total_print(harga, jumlah):
print(harga * jumlah)
hasil = hitung_total_print(18000, 2)
print("Isi variabel hasil:", hasil)
Output
36000
Isi variabel hasil: None

Angkanya tampil di layar, tapi variabel hasil berisi None. Function tanpa return mengembalikan None, jadi hasilnya tidak bisa dipakai lagi. Aturan praktisnya: function yang menghitung sesuatu sebaiknya return, lalu yang menampilkan hasil adalah kode yang memanggilnya.

Nilai bawaan dan argumen bernama

Parameter bisa diberi nilai bawaan, sehingga boleh tidak diisi saat memanggil:

diskon.py
def harga_akhir(total, persen_diskon=0):
potongan = total * persen_diskon // 100
return total - potongan
print(harga_akhir(73000))
print(harga_akhir(73000, 10))
print(harga_akhir(total=73000, persen_diskon=20))
Output
73000
65700
58400

Baris terakhir memakai argumen bernama (total=..., persen_diskon=...). Hasilnya sama, tapi kodenya lebih jelas dibaca, terutama kalau function punya banyak parameter.

Contoh lengkap: kasir kecil

Sekarang gabungkan semuanya. Setiap function punya satu tugas, lalu function-function itu dipakai bersama:

kasir.py
def subtotal(harga, jumlah):
"""Harga satu jenis barang dikali jumlahnya."""
return harga * jumlah
def persen_diskon(total):
"""Aturan diskon toko: 10% kalau belanja di atas Rp50.000."""
if total > 50000:
return 10
return 0
def rupiah(angka):
"""Format angka menjadi teks rupiah, mis. 65700 -> 'Rp65.700'."""
return f"Rp{angka:,}".replace(",", ".")
keranjang = [("Kopi susu", 18000, 2), ("Roti bakar", 12000, 3)]
total = 0
for nama, harga, jumlah in keranjang:
total += subtotal(harga, jumlah)
print(f"{nama:<12} {jumlah} x {rupiah(harga)}")
diskon = total * persen_diskon(total) // 100
print(f"Total : {rupiah(total)}")
print(f"Diskon : {rupiah(diskon)}")
print(f"Bayar : {rupiah(total - diskon)}")
Output
Kopi susu 2 x Rp18.000
Roti bakar 3 x Rp12.000
Total : Rp72.000
Diskon : Rp7.200
Bayar : Rp64.800

Perhatikan manfaatnya. Kalau aturan diskon berubah, kamu cukup mengubah persen_diskon. Kalau format rupiah perlu diperbaiki, cukup ubah rupiah. Setiap bagian bisa dipahami dan diuji sendiri-sendiri.

Teks di antara tiga tanda kutip di baris pertama setiap function disebut docstring. Isinya penjelasan singkat tentang tugas function itu. VS Code menampilkannya saat kursor diarahkan ke nama function.

({nama:<12} menulis teks rata kiri dengan lebar 12 karakter, supaya kolomnya sejajar.)

Scope: variabel di dalam function

Variabel yang dibuat di dalam function hanya ada di dalam function itu (variabel lokal):

scope.py
def hitung():
luas = 10 * 2
return luas
print(hitung())
print(luas)
Output
20
Traceback (most recent call last):
File "scope.py", line 6, in <module>
print(luas)
^^^^
NameError: name 'luas' is not defined

luas hanya hidup selama hitung() berjalan. Ini justru menguntungkan: function tidak saling mengganggu variabel milik function lain. Cara yang benar untuk mengeluarkan nilai dari function adalah lewat return, seperti baris print(hitung()).

Kapan perlu membuat function?

  • Kode yang sama ditulis dua kali atau lebih. Jadikan function.
  • Sebuah bagian bisa diberi nama yang jelas, misalnya hitung_ongkir atau validasi_email. Itu calon function yang baik.
  • Sebuah blok kode terlalu panjang untuk dipahami sekaligus. Pecah menjadi beberapa function kecil.

Satu function, satu tugas. Kalau nama function-mu butuh kata “dan” (misalnya hitung_dan_cetak_dan_simpan), kemungkinan ia sebaiknya dipecah.

Error yang sering muncul

NameError: name 'hitung_total' is not defined Function dipanggil sebelum didefinisikan, atau namanya salah ketik. Python membaca dari atas ke bawah, jadi letakkan def di atas tempat ia dipanggil.

TypeError: hitung_total() missing 1 required positional argument: 'jumlah' Jumlah argumen saat memanggil kurang dari jumlah parameternya.

Hasil function selalu None. Lupa menulis return, atau return berada di dalam if yang tidak terpenuhi.

Cara membaca pesan error secara umum dibahas di membaca pesan error Python.

Latihan

  1. Buat function luas_persegi_panjang(panjang, lebar) yang mengembalikan luasnya.
  2. Buat function nilai_huruf(nilai) yang mengembalikan "A", "B", "C", atau "D" memakai aturan di artikel percabangan, lalu panggil untuk tiga nilai berbeda.

Kesimpulan

Function adalah kode yang diberi nama: ditulis sekali, dipanggil berkali-kali. Parameter memasukkan data, return mengeluarkan hasil, dan variabel di dalamnya tidak mengganggu bagian lain. Pakai function untuk memecah masalah besar menjadi bagian kecil yang masing-masing punya satu tugas.

Langkah berikutnya di jalur Mulai Ngoding dari Nol: menyimpan banyak data sekaligus dengan list dan dictionary.

Bagikan:WhatsAppTelegramXFacebook
Ilustrasi list berisi tiga kotak bernomor indeks 0 sampai 2 dan dictionary berisi pasangan kunci dan nilai untuk keterangan, jumlah, dan kategori
DasarTutorial

List dan Dictionary di Python untuk Pemula

Program sungguhan jarang mengolah satu data saja. List menyimpan daftar yang berurutan, dictionary menyimpan data berdasarkan namanya. Keduanya akan kamu pakai setiap hari.

19 Oktober 20265 mnt

Enter bukaEsc tutupHalaman pencarian