Fungsi hitungLuas pada chapter sebelumnya menerima dua input dan mengembalikan satu output. Fungsi nyata jauh lebih bervariasi: ada fungsi tanpa input sama sekali, ada fungsi yang mengembalikan beberapa nilai sekaligus, bahkan ada fungsi yang tidak mengembalikan apa pun karena tugasnya hanya menampilkan sesuatu ke layar. Memahami ke mana arah nilai mengalir — masuk lewat input, keluar lewat output — adalah fondasi bagi seluruh chapter fungsi lainnya, dari nargin/nargout sampai varargin. Cakupan chapter ini:
- deklarasi input dan output, termasuk zero-input dan multiple outputs
- output yang diabaikan pemanggil dan peran variabel
ans - perbedaan fungsi yang mengembalikan nilai dengan fungsi yang hanya memberi side effect
Input: Nilai yang Masuk lewat Parameter #
Aturannya: parameter input dideklarasikan di dalam tanda kurung baris function, dan nilai yang dikirim pemanggil disalin ke parameter tersebut. Mekanisme di balik layar: MATLAB meneruskan argumen by value — fungsi menerima salinan nilai, sehingga mengubah parameter di dalam fungsi tidak mengubah variabel milik pemanggil. Deklarasi () kosong (atau tanpa kurung) berarti fungsi tidak menerima input; pemanggilan statistikSederhana() tetap sah, dan fungsi dapat mengisi data contoh sendiri lewat pemeriksaan nargin < 1.
Berikut statistikSederhana.m — fungsi yang menggabungkan zero-input, dua output, dan cabang side effect:
function [nilaiMin, nilaiMax] = statistikSederhana(data)
% statistikSederhana Statistik ringkas sebuah vektor.
% [nilaiMin, nilaiMax] = statistikSederhana(data) mengembalikan nilai
% minimum dan maksimum vektor data.
% statistikSederhana() tanpa input memakai data contoh [50 75 88 62 90].
% statistikSederhana(data) tanpa menampung output hanya menampilkan
% ringkasan ke Command Window.
if nargin < 1
data = [50 75 88 62 90]; % data contoh bila input kosong
end
if nargout == 0
% dipanggil sebagai statement: tampilkan ringkasan (side effect)
fprintf('min = %d, max = %d, n = %d\n', ...
min(data), max(data), numel(data));
else
% ada output yang diminta: kembalikan nilainya
nilaiMin = min(data);
nilaiMax = max(data);
end
endMari kita bedah baris-baris kode di atas:
- Baris 1 (
function [nilaiMin, nilaiMax] = ...): dua output dideklarasikan dalam kurung siku — pemanggil boleh menangkap satu atau keduanya. - Baris 10 (
if nargin < 1):narginberisi jumlah input yang benar-benar dikirim; bila pemanggil menulisstatistikSederhana(), fungsi memakai data contohnya sendiri. - Baris 15 (
if nargout == 0):nargoutberisi jumlah output yang diminta pemanggil; nol berarti fungsi dipanggil sebagai statement tanpa menampung hasil, sehingga fungsi beralih ke side effect mencetak ringkasan. - Baris 19-21 (
nilaiMin = min(data); ...): kedua output diisi hanya pada cabangelse— persis seperti dokumentasi MATLAB sarankan agaranstidak terisi tanpa sengaja.
Multiple Outputs dan Output yang Diabaikan #
Pemanggil menangkap beberapa output dengan kurung siku: [a, b] = statistikSederhana(data). Aturan penghitungannya: pemanggil boleh meminta lebih sedikit output daripada deklarasi (output sisanya cukup tidak dipakai), tetapi meminta lebih banyak menghasilkan galat Too many output arguments. Skrip uji uji_statistikSederhana.m memperagakan keempat bentuk pemanggilan:
data = [3 7 1 9 4];
% dua output ditangkap sekaligus
[a, b] = statistikSederhana(data);
fprintf('dua output : a = %d, b = %d\n', a, b);
% hanya output pertama yang ditangkap
c = statistikSederhana(data);
fprintf('satu output : c = %d\n', c);
% zero-input: data contoh dipakai
[d, e] = statistikSederhana();
fprintf('tanpa input : d = %d, e = %d\n', d, e);
% zero-output: cabang nargout == 0 aktif, ringkasan dicetak
statistikSederhana(data);Output yang Dihasilkan:
dua output : a = 1, b = 9
satu output : c = 1
tanpa input : d = 50, e = 90
min = 1, max = 9, n = 5Tabel berikut merangkum nilai nargout yang diterima fungsi untuk tiap bentuk pemanggilan:
| Bentuk pemanggilan | nargout di dalam fungsi | Yang terjadi |
|---|---|---|
[a, b] = f(x) | 2 | kedua output diisi pemanggil |
a = f(x) | 1 | hanya output pertama dipakai |
f(x); (statement) | 0 | fungsi bebas memilih side effect |
if f(x) > 0 (ekspresi) | 1 | MATLAB meminta satu output untuk ekspresi |
ans: Kotak Default untuk Nilai Kembali #
Bila kita memanggil fungsi beroutput tanpa menampung hasilnya dan tanpa cabang nargout, MATLAB menyimpan output pertama ke variabel ans — persis perilaku sin(2) yang sudah kita kenal di Chapter Command Window dan Workspace. Setelah pemanggilan seperti itu, ans berisi nilai terakhir:
>> hitungLuas(6, 4)
ans =
24Nilai 24 tetap tersimpan di ans sampai ekspresi tanpa penampungan berikutnya menimpanya. Menumpuk nilai penting di ans membuat kode rapuh — kebiasaan yang lebih aman adalah selalu menampung output pada variabel bernama.
Mengembalikan Nilai vs Side Effect #
Dua gaya fungsi yang sering membingungkan pemula:
- Mengembalikan nilai: fungsi mengisi variabel output; pemanggil memutuskan sendiri apakah hasilnya dihitung, disimpan, atau ditampilkan.
- Side effect: fungsi langsung menampilkan atau mengubah sesuatu —
fprintf,disp, plot, atau penulisan berkas — tanpa mengembalikan nilai.
% gaya 1: mengembalikan nilai (mudah diuji dan dipakai ulang)
luas = hitungLuas(6, 4);
fprintf('luas = %d\n', luas);
% gaya 2: side effect (hasilnya hanya tampil di layar)
fprintf('luas = %d\n', hitungLuas(6, 4));Kedua baris menampilkan 24, tetapi hanya gaya pertama menyimpan nilai untuk dipakai variabel lain. Aturan praktis kita: fungsi menghitung sebaiknya mengembalikan nilai; fungsi khusus menampilkan (mis. tampilkanLaporan(x) tanpa output) boleh berupa side effect murni. Gaya campuran statistikSederhana — mengembalikan nilai bila diminta, mencetak ringkasan bila tidak — adalah pola adaptif yang sering dipakai fungsi analisis interaktif.
Ringkasan #
Nilai masuk ke fungsi lewat parameter input yang diteruskan by value, dan keluar lewat variabel output yang dideklarasikan [a, b] = nama(...). Pemanggil boleh meminta lebih sedikit output daripada deklarasi — nargin dan nargout memberi tahu fungsi berapa argumen yang benar-benar dikirim dan diminta, sehingga fungsi bisa beradaptasi dari zero-input sampai zero-output. Pemanggilan statement memberi nargout 0; fungsi yang tetap mengisi output pada konteks itu menimpa ans. Fungsi yang mengembalikan nilai lebih mudah diuji dan dirangkai daripada fungsi yang hanya memberi side effect — prinsip yang kita pegang sepanjang section ini. Berkas statistikSederhana.m dan uji_statistikSederhana.m di bagian bawah halaman memuat contoh utuh yang bisa dijalankan.