Fungsi yang kita tulis hingga chapter ini berisi satu blok perhitungan. Ketika tugas fungsi membesar — baca data, bersihkan, urutkan, hitung, format keluaran — satu badan fungsi berisi ratusan baris menjadi sulit dibaca dan diuji. Solusinya adalah memecah logika besar menjadi helper: fungsi kecil yang mengerjakan satu langkah. MATLAB menyediakan dua rumah untuk helper: berkas .m sendiri, atau local function — fungsi tambahan yang dideklarasikan di akhir berkas fungsi dan hanya terlihat di dalam berkas itu. Chapter ini membahas struktur, batas visibilitas, dan saat memilih fungsi lokal dibanding berkas terpisah.
Fungsi Lokal dalam Berkas Fungsi #
Aturannya: dalam berkas fungsi, fungsi pertama menjadi fungsi utama yang mewakili nama berkas, dan fungsi-fungsi setelahnya disebut local functions — MATLAB mendokumentasikannya sebagai fungsi yang hanya tersedia di dalam berkas. Mekanisme di balik layar: fungsi utama dan fungsi lokal berbagi satu berkas, tetapi setiap fungsi tetap punya function workspace sendiri — variabel data di olahData tidak terlihat oleh buangNaN kecuali dikirim sebagai input. Berikut olahData.m utuh:
function [jumlah, rataRata, minimum, maksimum] = olahData(data)
% olahData Membersihkan dan meringkas vektor data.
% [jumlah, rataRata, minimum, maksimum] = olahData(data) membuang
% elemen NaN dari vektor data, mengurutkan sisanya, lalu menghitung
% empat statistiknya.
% Fungsi lokal buangNaN dan cariRata hanya terlihat di berkas ini.
bersih = buangNaN(data); % panggil fungsi lokal 1
urut = sort(bersih); % fungsi bawaan MATLAB
jumlah = numel(urut);
rataRata = cariRata(urut); % panggil fungsi lokal 2
minimum = urut(1);
maksimum = urut(end);
end
function bersih = buangNaN(data)
% buangNaN Fungsi lokal: buang elemen NaN dari vektor.
mask = ~isnan(data);
bersih = data(mask);
end
function r = cariRata(v)
% cariRata Fungsi lokal: hitung rata-rata vektor.
r = sum(v) / numel(v);
endMari kita bedah baris-baris kode di atas:
- Baris 1 (
function [jumlah, ...] = olahData(data)): fungsi utama — namaolahDataharus sama dengan nama berkas; hanya fungsi ini yang bisa dipanggil dari luar. - Baris 8 (
bersih = buangNaN(data);): fungsi utama memanggil fungsi lokal seperti memanggil fungsi biasa — nama lokal sudah dikenal karena berada di berkas yang sama. - Baris 17 (
function bersih = buangNaN(data)): fungsi lokal pertama; posisinya setelahendfungsi utama, dengan help text sendiri. - Baris 23 (
function r = cariRata(v)): fungsi lokal kedua; parametervadalah salinanurut, bukan variabel yang sama.
Diagram berikut memetakan siapa yang boleh memanggil siapa:
Garis penuh menandai pemanggilan yang sah; garis putus-putus menandai pemanggilan yang ditolak karena fungsi lokal tidak terlihat dari luar berkas.
Visibilitas: Privat di Dalam Berkas #
Fungsi lokal tidak masuk ke search path — resolusi nama buangNaN hanya berhasil dari dalam berkas olahData.m. Skrip uji uji_olahData.m membuktikan dua arah sekaligus: pemanggilan olahData(data) berhasil, sementara fungsi lokalnya tidak dikenal:
data = [72 NaN 65 90 NaN 58 81];
[jumlah, rataRata, minimum, maksimum] = olahData(data);
fprintf('jumlah data bersih : %d\n', jumlah);
fprintf('rata-rata : %.4f\n', rataRata);
fprintf('minimum : %d\n', minimum);
fprintf('maksimum : %d\n', maksimum);
% fungsi lokal TIDAK terlihat dari luar berkas olahData.m
fprintf('exist buangNaN : %d\n', exist('buangNaN'));
fprintf('exist cariRata : %d\n', exist('cariRata'));Output yang Dihasilkan:
jumlah data bersih : 5
rata-rata : 73.2000
minimum : 58
maksimum : 90
exist buangNaN : 0
exist cariRata : 0Nilai exist 0 berarti nama itu tidak ditemukan sebagai variabel, fungsi, maupun berkas. Memanggil buangNaN secara langsung dari Command Window berakhir dengan galat Unrecognized function or variable 'buangNaN'. — nama tersebut memang tidak pernah dipublikasikan ke luar berkas.
Fungsi Lokal di Dalam Skrip #
Sejak MATLAB R2016b, skrip juga boleh memuat fungsi lokal. Pada R2016b sampai R2023b, fungsi lokal dalam skrip wajib ditulis di akhir berkas, setelah semua kode skrip. Sejak R2024a aturan itu longgar: fungsi boleh didefinisikan di bagian mana pun dari skrip, dan pemanggilan boleh mendahului definisi karena MATLAB mendaftarkan seluruh fungsi saat membaca berkas.
Fungsi Lokal vs Berkas Terpisah #
Helper bisa hidup sebagai fungsi lokal atau sebagai berkas sendiri. Pilihan kita memengaruhi visibilitas dan kerapian folder:
| Aspek | Fungsi lokal | Berkas terpisah |
|---|---|---|
| Terlihat oleh | hanya fungsi dalam berkas yang sama | semua pemanggil di path |
| Nama berkas | satu berkas mewakili semua fungsi | satu berkas per fungsi |
| Dipakai ulang lintas fungsi | tidak bisa | tinggal panggil namanya |
| Kepadatan current folder | rampung: 1 berkas | bertambah dengan tiap helper |
| Cocok untuk | langkah internal satu algoritma | utilitas umum (dipakai > 1 fungsi) |
Aturan praktisnya: helper yang hanya bermakna bagi satu fungsi utama — seperti buangNaN yang khusus membersihkan input olahData — sebaiknya menjadi fungsi lokal, karena keberadaannya adalah detail implementasi. Helper yang dipakai banyak fungsi (mis. cariRata bila sepuluh fungsi lain butuh rata-rata) sebaiknya naik kelas menjadi berkas sendiri agar tidak diduplikasi.
Ringkasan #
Local function adalah fungsi tambahan di akhir berkas fungsi yang hanya terlihat di dalam berkasnya — fungsi utama tetap satu-satunya pintu masuk. Setiap fungsi tetap memegang function workspace sendiri, sehingga pertukaran data antar fungsi utama dan lokal tetap lewat input/output. Skrip juga bisa memuat fungsi lokal sejak R2016b (wajib di akhir berkas hingga R2023b, bebas posisi sejak R2024a), tetapi Octave menuntut definisi sebelum pemanggilan — berkas fungsi terpisah adalah pola yang aman di kedua lingkungan. Pilih fungsi lokal untuk langkah internal satu algoritma, dan berkas terpisah untuk helper yang dipakai lintas fungsi. Berkas olahData.m dan uji_olahData.m di bagian bawah halaman memuat contoh lengkapnya.