Format Dokumen Pengajaran & Panduan Siswa
BINUS University @ Bekasi SMAS St. John Pertemuan 12 dari 17

MODUL 12 — Functions / Modular

Ekstrakurikuler CSSE: Computer Science & Software Engineering (Python)

Jenjang Peserta Siswa SMA (Kelas 10–12)
Alokasi Waktu 100 Menit
Fokus Materi def, parameter, return, default, modular
Target Selesai 3 fungsi (luas, keliling, konversi) jadi & terpakai dalam satu program
Tools VS Code & Python (Run ▶)
Prioritas sesi: Wajib: def nama(parameter): ... return nilai, parameter & argument (termasuk default), pemanggilan fungsi, dan beda return vs print — plus memecah program jadi fungsi modular (satu fungsi satu tugas).
Materi pengayaan (opsional jika waktu cukup)

Parameter default (def sapa(nama="teman"):) dipakai sebagai nilai aman, plus fungsi yang memanggil fungsi lain untuk merakit program besar dari kepingan kecil.

1. Tujuan Pembelajaran

  1. Mendefinisikan fungsi dengan def dan memanggilnya dengan tanda kurung.
  2. Mengirim data ke dalam fungsi lewat parameter dan argument.
  3. Mengembalikan hasil dengan return dan menyimpannya ke variabel untuk dipakai lagi.
  4. Menjelaskan dan membedakan return (mengembalikan nilai) vs print (hanya menampilkan) — dengan contoh nyata.
  5. Menggunakan parameter default sebagai nilai cadangan saat argument tidak dikirim.
  6. Memecah program menjadi fungsi modular: satu fungsi, satu tanggung jawab.
  7. Menggunakan kembali (reuse) satu fungsi di beberapa tempat tanpa copy-paste.
  8. Membangun tugas penilaian sesi ini: fungsi luas, keliling, dan konversi yang dipanggil dalam satu program.

2. Peta Jalan 17 Pertemuan

Hari ini siswa menempuh barisan ke-12 dari 17 — 71% perjalanan:

[ 01-02 ] Fondasi: konsep program, algoritma, flowchart [ 03-05 ] Mulai coding: print, variabel, input/output [ 06-07 ] Operator & percabangan if/elif/else [ 08 ] Mini Project 1: Decision Making [ 09 ] Looping / Perulangan [ 10 ] Nested Loop & Pattern Programming [ 11-13 ] List, Functions, String <-- HARI INI (100 Menit) [ 14 ] Mini Project 2: Simple App [ 15 ] AI-Assisted Coding [ 16-17 ] Final Project: Development & Presentation

3. Rundown Waktu Terperinci (100 Menit)

WaktuBlokAktivitas
10'PembukaCover, tujuan sesi, rekap Sesi 11 (list, indeks, rata-rata sum/len)
15'Materi 1Analogi mesin mini (blender): def, memanggil fungsi, parameter sebagai input mesin
15'Materi 2return — hasil keluar mesin; beda return vs print (jebakan klasik)
10'Materi 3Parameter default; modular: satu fungsi satu tugas
20'Tugas 1Fungsi luas_persegi_panjang & keliling — bangun & panggil
20'ChallengeFungsi cek_genap & konversi_suhu; gabungkan jadi satu program
10'PenutupPembahasan challenge, rangkuman 5 poin, preview Sesi 13

4. Pedagogi & Penjelasan Konsep

A. Analogi Mesin Mini (Blender)

Function = mesin mini, kayak blender. Masukkan buah (parameter) — tekan tombol (panggil fungsi) — keluar jus (return). Kamu tidak perlu tahu isi mesinnya; kamu perlu tahu cara mengoperasikannya. Dan sekali mesin dibuat, buah apa pun bisa di-blend: buah mangga, manggis, jambu — mesinnya sama. Itulah beda fungsi dengan kode biasa: ditulis sekali, dipanggil berkali-kali. Kaitkan dengan Sesi 11: rata-rata yang kemarin ditulis sekali jalan, minggu depan (proyek) harus dipanggil di tiga menu berbeda — hari ini kalian belajar cara membungkusnya.

B. return vs print — Dua Hal yang SANGAT Beda

print = mesin memberi tahu apa yang sedang dibuat (nampak di layar, lalu lenyap — tidak bisa dipakai lagi). return = mesin menyerahkan hasilnya ke tangan yang memanggil, dan hasil itu bisa disimpan, dipakai, dihitung lagi. Analogi kelas: mesin yang hanya print itu kayak barista yang hanya menunjukkan kopi — kamu bisa lihat tapi tidak bisa minum; mesin yang return menyerahkan kopi ke tanganmu.

Catatan pengajar: return vs print sering dikacaukan siswa (dari kurikulum resmi). Uji cepat di kelas: tampilkan fungsi yang mem-print dan fungsi yang return, lalu minta siswa menebak mana yang bisa dipakai untuk perhitungan lanjutan — total = kali(3, 4) + 1 hanya benar kalau fungsi return. Biarkan mereka menjalankan versi yang salah dan melihat sendiri hasilnya.

C. Parameter Itu Kotak Masukan Berlabel

Parameter = kotak masukan berlabel yang tertancap di mesin: nama kotak ditulis di def luas(panjang, lebar), isinya diberikan saat dipanggil: luas(8, 5). Urutan pengisian mengikuti urutan kotak — luas(8, 5) beda dengan luas(5, 8) hanya kalau rumusnya tidak simetris. Analogi formula: isi kotaknya apa, otaknya selesai — siswa tidak perlu menghafal nilai dari luar, cukup tahu mesinnya cara pakai.

def sapa(nama="teman"):     # default: kalau kotak tidak diisi, pakai "teman"
    return "Hai, " + nama + "!"

print(sapa("Budi"))   # Hai, Budi!
print(sapa())         # Hai, teman!

Trik cepat memilih jumlah parameter: "apa yang mesin ini butuhkan untuk bekerja?" — itulah parameternya. Kalau butuh dua data, jangan paksa jadi satu.

D. Error Itu Alarm, Bukan Aib

NameError saat memanggil luas(8, 5) = mesinnya belum dibuat (def-nya di bawah, atau belum ditulis — def harus dieksekusi dulu sebelum dipanggil). TypeError: missing 2 required positional arguments = kotak masukan kosong — kamu menyalakan blender tanpa memasukkan buah. Keduanya alarm posisi, bukan vonis.

Catatan pengajar: dua jebakan posisi paling sering di kelas — (1) fungsi dipanggil sebelum def dieksekusi, (2) return diganti print sehingga hasilnya None. Keduanya jangan diberi solusi instan; biarkan siswa membaca pesan error dan menelusuri sendiri — itu latihan debugging yang lebih berharga daripada jawabannya.

5. Panduan Praktik Langkah demi Langkah

Langkah 1: Pemanasan — Mesin Pertama (10 menit)

Minta siswa menulis dan menjalankan:

def sapa(nama):
    return "Hai, " + nama + "!"

print(sapa("Budi"))    # Hai, Budi!
print(sapa("Ani"))     # Hai, Ani!

Diskusikan: kenapa sapa("Budi") bisa dipanggil dua kali dengan hasil beda? Satu mesin, buah beda. Tanyakan juga: apa yang terjadi kalau return diganti print — lalu coba hasil = sapa("Budi") + "!".

Langkah 2: Tugas 1 — Fungsi Luas & Keliling (20 menit)

Siswa kerjakan di file geometri.py:

  1. Fungsi luas_persegi_panjang(panjang, lebar) yang return hasilnya, simpan ke variabel, cetak.
  2. Fungsi keliling_persegi_panjang(panjang, lebar) yang return 2 * (panjang + lebar).
  3. Panggil keduanya sekali: misal p = 8, l = 5, cetak kedua hasilnya.
  4. Level lanjutan: panggil lagi dengan data lain — tanpa menulis ulang rumus.

Moment emas: siswa yang memanggil luas tanpa simpan hasilnya sering kaget output None — itu justru bahan diskusi return vs print (bagian 4B).

Langkah 3: Materi 3 — Parameter Default (10 menit)

Tambahkan ke file yang sama:

def sapa(nama="teman"):
    return "Hai, " + nama + "!"

print(sapa("Budi"))   # Hai, Budi!
print(sapa())         # Hai, teman!

Tekankan: default itu nilai cadangan — kotak yang tidak diisi tetap membuat mesin jalan.

Langkah 4: Challenge — Cek Genap & Konversi Suhu (20 menit)

Program utuh dengan tiga fungsi (dari aktivitas kurikulum):

def cek_genap(angka):
    return angka % 2 == 0

def konversi_suhu(celsius):
    return celsius * 9 / 5 + 32

def status_nilai(nilai):
    return "Lulus" if nilai >= 75 else "Remedial"

Minta siswa: panggil ketiganya di bawah file, gabungkan dengan list nilai dari Sesi 11 — rekap status tiap nilai tinggal satu loop. Framing: gabungkan alat lama, bukan pelajaran baru.

Langkah 5: Pembahasan & Penutup (10 menit)

Bedah solusi challenge. Poin kunci: cek_genap return boolean — bisa langsung dipakai di if. Tutup dengan rangkuman 5 poin + preview Sesi 13.

6. Master Solution Code (kode.py — Sesi 12)

Kode lengkap per bagian ada di kode.py. Berikut solusi utuh mandiri yang bisa dijalankan (dasar kode.py + tugas penilaian: 3 fungsi dipanggil dalam satu program), dengan output harapan di komentar:

# ============ SESI 12 - FUNCTIONS / MODULAR ============
# Satu fungsi satu tugas, ditulis sekali, dipanggil berkali-kali.

# --- BAGIAN 1: fungsi geometri (return, bukan print) ---
def luas_persegi_panjang(panjang, lebar):
    return panjang * lebar

def keliling_persegi_panjang(panjang, lebar):
    return 2 * (panjang + lebar)

def status_nilai(nilai):
    return "Lulus" if nilai >= 75 else "Remedial"

# --- BAGIAN 2: fungsi challenge ---
def cek_genap(angka):
    return angka % 2 == 0

def konversi_suhu(celsius):
    return celsius * 9 / 5 + 32

# --- BAGIAN 3: panggil semuanya dalam satu program ---
print("Luas 8x5     :", luas_persegi_panjang(8, 5))      # 40
print("Keliling 8x5 :", keliling_persegi_panjang(8, 5))  # 26

luas = luas_persegi_panjang(8, 5)
print("Luas disimpan:", luas + 1)                       # 41 - bisa dihitung lagi!

print("32 C =", konversi_suhu(32), "F")                  # 32 C = 89.6 F
print("7 genap?", cek_genap(7), "| 8 genap?", cek_genap(8))  # False | True

# --- BAGIAN 4: reuse - status_nilai dipakai loop atas list ---
nilai = [85, 92, 68]
for angka in nilai:
    print(angka, status_nilai(angka))
# 85 Lulus
# 92 Lulus
# 68 Remedial

Output lengkap program:

Luas 8x5     : 40
Keliling 8x5 : 26
Luas disimpan: 41
32 C = 89.6 F
7 genap? False | 8 genap? True
85 Lulus
92 Lulus
68 Remedial

Kunci pembahasan: fungsi didefinisikan di atas (mesin dibuat dulu, baru dipakai), return memungkinkan hasil dipakai dihitung lagi (luas + 1), dan status_nilai dipanggil ulang di loop — inilah reuse: satu def, terpakai berkali-kali.

7. Troubleshooting Guide (Pegangan Guru)

Masalah Penyebab Tindakan Perbaikan
Hasil panggilan fungsi selalu None Isi fungsi memakai print alih-alih return (atau lupa return sama sekali) — sering dikacaukan (catatan pengajar kurikulum). Bedah lewat analogi: print hanya menampilkan, return menyerahkan hasil. Tampilkan hasil = luas(8, 5) lalu print(hasil + 1) — yang print menghasilkan error, yang return jalan.
NameError: name 'luas' is not defined Fungsi dipanggil sebelum def dieksekusi (def di bawah, atau salah ketik nama). Ingatkan aturan posisi: def dulu, panggil belakangan. Cek ejaan nama fungsi (huruf kecil semua, garis bawah).
TypeError: missing 2 required positional arguments Memanggil fungsi tanpa argument: luas() padahal parameternya dua. Analogi: blender dinyalakan tanpa buah. Hitung bersama kotak masukan yang dibutuhkan — jumlah argument harus sama dengan jumlah parameter.
Fungsi tampak tidak jalan sama sekali Def sudah ditulis tapi hasilnya tidak di-cetak dan tidak disimpan. Ingatkan: mendefinisikan = merakit mesin, belum menyalakannya. Perlu baris panggilan (print(luas(8, 5))) agar sesuatu terjadi.
IndentasiError setelah def Baris dalam fungsi tidak di-indentasi (aturan blok Python dari Sesi 07). Yang mau "masuk mesin" harus menjorok 4 spasi. Bandingkan dengan blok if — aturan indentasinya sama.
Hasil perhitungan salah / ganda Kode rumus ditulis di luar fungsi juga, sehingga dihitung dua kali atau kebawa kondisi lama. Prinsip modular: rumus hidup hanya di dalam fungsi. Di luar, cukup panggil. Hapus duplikatnya.

8. Checklist Evaluasi Siswa

9. Jembatan ke Pertemuan Berikutnya (Sesi 13)

Fungsi hari ini bekerja di angka. Minggu depan alat yang sama dipakai ke teks: string manipulation — membersihkan nama, mengubah huruf, memecah kalimat. Dan ada kejutan menanti: string itu immutable — setelah dibuat, isinya tidak bisa diganti, semuanya menghasilkan string baru. Siap-siap kaget, nama.upper() tidak mengubah nama.

nama = "budi"
nama.upper()
print(nama)           # budi - tetap kecil!

besar = nama.upper()
print(besar)          # BUDI - hasilnya disimpan di variabel baru

Pembersihan teks akan jadi fitur wajib di Mini Project 2 (Sesi 14) — setiap input nama harus dibersihkan dulu sebelum masuk list.