Membuat berkas kuadrat.m hanya demi satu baris y = x^2 + 1 terasa berlebihan, tetapi fungsi sependek itu justru sering kita butuhkan: sekadar membulatkan, mengalikan dengan konstanta, atau menyaring nilai. MATLAB menyediakan anonymous function — fungsi satu baris yang didefinisikan tanpa berkas, langsung di dalam ekspresi. Bentuknya singkat, tetapi dua perilakunya perlu dipahami betul: anonymous function adalah function handle, dan variabel luar yang dipakainya ditangkap sebagai nilai saat definisi. Cakupan chapter ini:

  • sintaks f = @(x) ekspresi dengan nol, satu, atau beberapa input
  • mekanisme capture variabel luar saat fungsi dibuat
  • pemakaian anonymous function sebagai argumen fungsi seperti fzero

Anatomi @(input) ekspresi #

Aturannya: anonymous function ditulis nama = @(input) ekspresi — operator @ membuat function handle, kurung tepat setelah @ mendaftarkan input, dan ekspresi setelahnya adalah seluruh isi fungsi (boleh hanya satu pernyataan executable). Mekanisme di balik layar: @(x) x^2 + 1 membuat objek bertipe function_handle yang menyimpan daftar input dan ekspresinya; memanggil f(3) mengevaluasi ekspresi dengan x diikat ke 3 dan mengembalikan hasilnya. Jumlah input bebas — dari nol sampai banyak:

matlab
% satu input
f = @(x) x^2 + 1;
fprintf('f(3)      = %d\n', f(3));
fprintf('f(-2)     = %d\n', f(-2));

% dua input sekaligus
rata = @(a, b) (a + b) / 2;
fprintf('rata(8,3) = %.2f\n', rata(8, 3));

% nol input juga bisa
sapa = @() 'Halo dari anonymous function!';
disp(sapa());

Output yang Dihasilkan:

text
f(3)      = 10
f(-2)     = 5
rata(8,3) = 5.50
Halo dari anonymous function!

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (f = @(x) x^2 + 1;): f menjadi function handle dengan satu input; ekspresi x^2 + 1 adalah seluruh badan fungsi.
  2. Baris 7 (rata = @(a, b) (a + b) / 2;): dua input dipisah koma di dalam kurung @; ekspresi boleh memakai keduanya.
  3. Baris 11 (sapa = @() 'Halo...';): kurung kosong berarti tanpa input; sapa() selalu mengembalikan char yang sama.

Penangkapan Variabel: Nilai, Bukan Referensi #

Anonymous function boleh memakai variabel yang ada di workspace saat fungsi dibuat — perilaku ini disebut capture (atau closure). Aturan pentingnya: yang ditangkap adalah nilainya, bukan tautan ke variabelnya. Dokumentasi MATLAB menyatakannya gamblang: nilai-nilai itu tetap tersimpan di dalam handle walaupun variabel aslinya dihapus atau diubah setelahnya. Bukti kecil berikut mengubah k setelah g dibuat:

matlab
% variabel luar ditangkap SEBAGAI NILAI saat definisi (bukan referensi)
k = 2;
g = @(x) k * x;
k = 100;
fprintf('g(5)      = %d  (memakai k saat definisi, bukan k sekarang)\n', g(5));

Output yang Dihasilkan:

text
g(5)      = 10  (memakai k saat definisi, bukan k sekarang)

g(5) menghasilkan 10, bukan 500 — g menyimpan salinan k = 2 dari detik definisinya, dan penugasan k = 100 tidak menyentuh salinan itu. Konsekuensinya praktis: untuk memberi anonymous function nilai baru, kita harus membuat handle baru, bukan mengubah variabel lamanya.

Anonymous Function sebagai Argumen #

Kekuatan utama anonymous function muncul saat ia dikirim sebagai input fungsi lain — banyak fungsi MATLAB menerima function handle untuk bisa bekerja atas rumus apa pun. Contoh klasiknya fzero(f, x0), fungsi bawaan yang mencari akar persamaan f(x) = 0 dimulai dari tebakan x0:

matlab
% anonymous function dikirim sebagai argumen fungsi lain
akar = fzero(@(x) x^3 - 2*x - 5, 2);
fprintf('akar      = %.6f\n', akar);

% dipanggil per elemen lewat arrayfun
kuadrat = @(x) x.^2;
hasil = arrayfun(kuadrat, [1 2 3 4]);
fprintf('kuadrat   : %d %d %d %d\n', hasil);

Output yang Dihasilkan:

text
akar      = 2.094551
kuadrat   : 1 4 9 16

Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (akar = fzero(@(x) x^3 - 2*x - 5, 2);): handle dibuat di tempat (temporary) sebagai argumen pertama; fzero memanggilnya berulang kali dengan berbagai nilai x sampai akar 2.094551 ditemukan.
  2. Baris 6 (hasil = arrayfun(kuadrat, [1 2 3 4]);): arrayfun(f, v) memanggil f sekali per elemen v lalu mengumpulkan hasilnya — pola yang akrab dengan operator titik, tetapi bekerja untuk ekspresi apa pun.

Pola fzero(@(x) ..., x0) inilah alasan anonymous function jarang berdiri sendiri: fungsi numerik seperti fzero, integral, dan ode45, serta fungsi plot, semuanya meminta handle — dan rumus pendek paling natural ditulis langsung di posisi argumen.

Kapan Memakai Anonymous Function #

AspekAnonymous functionBerkas fungsi
Panjang isisatu ekspresitidak terbatas
Berkas .mtidak perluwajib, nama = nama fungsi
Variabel luarditangkap saat definisihanya lewat input
Cocok untukrumus pendek, argumen fzero/plotlogika banyak langkah
helptidak adaada (help text)

Aturan praktis kita: bila fungsinya satu ekspresi dan hidupnya singkat, tulis anonymous; begitu butuh if, loop, atau lebih dari beberapa baris, pindahkan ke berkas fungsi. Kedua bentuk menghasilkan function handle yang bisa dipanggil dan dioper dengan cara sama — perbedaannya hanya tempat hidup definisinya. Berkas contoh.m di bagian bawah halaman menjalankan seluruh contoh chapter ini secara berurutan.

Ringkasan #

Anonymous function mendefinisikan fungsi satu ekspresi tanpa berkas: f = @(x) ekspresi membuat function handle yang dipanggil seperti fungsi biasa. Variabel workspace yang terlihat saat definisi ditangkap sebagai nilai — perubahan variabel setelahnya tidak memengaruhi handle, dan nilai baru menuntut handle baru. Karena ringkas dan lahir di dalam ekspresi, bentuk ini paling sering dipakai sebagai argumen fungsi numerik seperti fzero, integral, dan arrayfun. Untuk logika yang lebih panjang dari satu ekspresi, berkas fungsi tetap rumah yang tepat.