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:

matlab
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
end

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (function [nilaiMin, nilaiMax] = ...): dua output dideklarasikan dalam kurung siku — pemanggil boleh menangkap satu atau keduanya.
  2. Baris 10 (if nargin < 1): nargin berisi jumlah input yang benar-benar dikirim; bila pemanggil menulis statistikSederhana(), fungsi memakai data contohnya sendiri.
  3. Baris 15 (if nargout == 0): nargout berisi jumlah output yang diminta pemanggil; nol berarti fungsi dipanggil sebagai statement tanpa menampung hasil, sehingga fungsi beralih ke side effect mencetak ringkasan.
  4. Baris 19-21 (nilaiMin = min(data); ...): kedua output diisi hanya pada cabang else — persis seperti dokumentasi MATLAB sarankan agar ans tidak 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:

matlab
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:

text
dua output  : a = 1, b = 9
satu output : c = 1
tanpa input : d = 50, e = 90
min = 1, max = 9, n = 5

Tabel berikut merangkum nilai nargout yang diterima fungsi untuk tiap bentuk pemanggilan:

Bentuk pemanggilannargout di dalam fungsiYang terjadi
[a, b] = f(x)2kedua output diisi pemanggil
a = f(x)1hanya output pertama dipakai
f(x); (statement)0fungsi bebas memilih side effect
if f(x) > 0 (ekspresi)1MATLAB 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:

text
>> hitungLuas(6, 4)

ans =

    24

Nilai 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.
matlab
% 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.