IN1037 . CODE INITIATION

Sesi 9: Fungsi, Prosedur, dan Modularitas Kode

Fondasi Kode Bersih: Mengorganisasi perhitungan kompleks menjadi unit-unit logis yang independen dan dapat digunakan kembali (reusable).

I. Ulasan: Mengapa Fungsi Wajib dalam Sains?

Fungsi adalah blok kode bernama yang hanya berjalan ketika dipanggil. Dalam komputasi saintifik, fungsi adalah jantung dari modularitas, menawarkan manfaat:

  • Reusabilitas: Formula yang sama (misalnya, menghitung energi kinetik) dapat dipanggil ratusan kali tanpa perlu ditulis ulang.
  • Keterbacaan: Kode utama menjadi lebih ringkas karena blok besar logika berada di dalam fungsi (abstraction).
  • Kemudahan Debugging: Jika ada error, Anda tahu persis di fungsi mana masalah itu berada.

Anatomi Fungsi: def, Parameter, dan return

Fungsi didefinisikan dengan kata kunci def. Ia menerima *input* melalui **parameter** (argumen) dan mengirimkan *output* melalui kata kunci return. Sebuah fungsi yang tidak memiliki return hanya menjalankan aksi (disebut *prosedur*).

Cakupan Variabel (Scope)

Penting: Variabel yang didefinisikan di dalam fungsi bersifat lokal dan tidak dapat diakses di luar fungsi. Ini memastikan fungsi bersifat independen. Variabel **global** harus dihindari sebisa mungkin dalam fungsi untuk menjaga modularitas.

II. Contoh Manual: Implementasi Fungsi Rumus Gerak

Kita ingin menghitung Kecepatan Akhir (vt) dari benda yang bergerak dengan percepatan konstan.

2.1. Formula Gerak: vt = v0 + a . t

INPUT yang Dibutuhkan (Parameter):
v0 (Kecepatan awal), a (Percepatan), t (Waktu).

PANGGILAN 1: Hitung Kecepatan Akhir
input: v0 = 10, a = 2, t = 5
Kalkulasi: 10 + (2 * 5) = 20
Output: 20.0

PANGGILAN 2: Skenario Berbeda
input: v0 = 5, a = -1.5, t = 2
Kalkulasi: 5 + (-1.5 * 2) = 2.0
Output: 2.0

Fungsi memungkinkan kita melakukan kalkulasi yang sama berulang kali dengan input yang berbeda tanpa menulis ulang formula. Nilai hasil di-*return* agar dapat digunakan untuk perhitungan lain (misalnya, menghitung Jarak).

III. Kode Praktik (Google Colab)

3.1. Kode Sederhana: Fungsi Kalkulasi Konstanta Boltzmann

Membuat fungsi untuk menghitung Energi Termal rata-rata per partikel, E = (3/2)kT.

In [1]: python
# Konstanta Boltzmann (J/K)
K_BOLTZMANN = 1.380649e-23 

def hitung_energi_termal(suhu_kelvin):
    """
    Menghitung energi termal rata-rata partikel (Joule)
    pada suhu_kelvin tertentu.
    """
    # Formula: E = (3/2) * k * T
    energi = 1.5 * K_BOLTZMANN * suhu_kelvin
    return energi

# Panggilan Fungsi
T_ruangan = 300.0 # Kelvin
T_kriogenik = 4.2  # Helium cair

E_ruangan = hitung_energi_termal(T_ruangan)
E_kriogenik = hitung_energi_termal(T_kriogenik)

print(f"Energi Termal (300 K): {E_ruangan:.2e} J")
print(f"Energi Termal (4.2 K): {E_kriogenik:.2e} J")
Out [1]:
Energi Termal (300 K): 6.21e-21 J
Energi Termal (4.2 K): 8.69e-23 J

3.2. Kode Kompleks: Fungsi dengan Logika Kontrol dan Data List

Membuat satu fungsi untuk **menghitung rata-rata List** dan **mengklasifikasikan** hasilnya, mengintegrasikan Sesi 4, 6, dan 9.

In [2]: python
def analisis_konduktivitas(data_konduktivitas):
    """
    Menerima List data konduktivitas dan mengembalikan rata-rata
    serta status klasifikasi bahannya.
    """
    if not data_konduktivitas:
        return 0.0, "Tidak ada data"

    # Kalkulasi Rata-rata (List Function)
    rata_rata = sum(data_konduktivitas) / len(data_konduktivitas)

    # Logika Klasifikasi (Kondisional)
    if rata_rata > 1e7:
        status = "Konduktor Superior"
    elif rata_rata > 1e3:
        status = "Konduktor Standar"
    else:
        status = "Semikonduktor/Isolator"
        
    return rata_rata, status

# Data Eksperimen (S/m)
konduktor_A = [1.2e7, 1.1e7, 1.3e7]
konduktor_B = [5000.0, 6500.0, 7000.0]

avg_A, status_A = analisis_konduktivitas(konduktor_A)
avg_B, status_B = analisis_konduktivitas(konduktor_B)

print(f"Bahan A: Rata-rata {avg_A:.2e} S/m -> {status_A}")
print(f"Bahan B: Rata-rata {avg_B:.2e} S/m -> {status_B}")
Out [2]:
Bahan A: Rata-rata 1.20e+07 S/m -> Konduktor Superior
Bahan B: Rata-rata 6.17e+03 S/m -> Konduktor Standar

3.3. Kode Kompleks: Fungsi dengan Argumen Default dan *Keyword*

Menggunakan Argumen Default untuk Percepatan Gravitasi (g = 9.81 m/s2) dalam menghitung Energi Potensial, sehingga g tidak perlu dimasukkan setiap saat.

In [3]: python
def hitung_energi_potensial(massa, tinggi, gravitasi=9.81):
    """
    Menghitung Energi Potensial (Joule).
    Gravitasi memiliki nilai default 9.81 m/s^2.
    """
    # Formula: E_p = m * g * h
    energi = massa * gravitasi * tinggi
    return energi

# Skenario 1: Bumi (menggunakan nilai default 9.81)
m_objek = 10.0 # kg
h_objek = 5.0  # meter
Ep_Bumi = hitung_energi_potensial(m_objek, h_objek)

# Skenario 2: Bulan (menggunakan keyword argument)
g_bulan = 1.62 # m/s^2
Ep_Bulan = hitung_energi_potensial(massa=m_objek, tinggi=h_objek, gravitasi=g_bulan)

print(f"Energi Potensial di Bumi: {Ep_Bumi:.2f} J")
print(f"Energi Potensial di Bulan: {Ep_Bulan:.2f} J")
Out [3]:
Energi Potensial di Bumi: 490.50 J
Energi Potensial di Bulan: 81.00 J

IV. Penugasan / PR Sesi 9: Fungsi Kalkulator Vektor

Tugas Anda adalah membuat fungsi yang menghitung Dot Product (hasil skalar) dari dua vektor 2D.

  1. Definisi Fungsi: Buat fungsi bernama dot_product_2d yang menerima empat parameter: x1, y1, x2, y2.
  2. Formula: Dot product: D = (x1 × x2) + (y1 × y2).
  3. Implementasi: Hitung dan kembalikan (return) nilai D.
  4. Pengujian: Panggil fungsi tersebut untuk menghitung Dot Product Vektor A (3, 4) dan Vektor B (1, −2). Hasilnya harus −5.