← Semua pembelajaran / Python Dasar
Fase 5 Β· Fungsi

Membuat Fungsi Sendiri

Sejauh ini kamu memakai fungsi buatan orang lain. Sekarang giliranmu membuatnya, dan cara berpikirmu tentang program akan berubah.

Sumber asli docs.python.org Resmi Rangkuman ~6 menit baca

Intisari

  • Bentuknya: def nama(parameter):, isinya menjorok ke dalam.
  • Menulis def tidak menjalankan apa pun. Kode baru berjalan saat fungsinya dipanggil: nama().
  • return menyerahkan hasil ke pemanggil, sekaligus menghentikan fungsi di titik itu.
  • print() menampilkan ke layar; return menghasilkan nilai. Keduanya bukan hal yang sama.
  • Fungsi tanpa return otomatis mengembalikan None.

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.