Fungsi

Mendefinisikan berkas function dengan argumen masukan dan nilai balik.

Daftar isi

Fungsi adalah berkas .m yang membungkus satu perhitungan menjadi unit bernama, dengan argumen masukan yang diterima dan nilai balik yang dihasilkan. Topik ini membahas anatomi berkas fungsi, pemanggilannya dari Command Window maupun skrip lain, ruang kerjanya yang terpisah dari pemanggil, serta peran nargin dalam menghitung argumen yang diberikan. Setelah memahami materi ini, perhitungan yang dipakai berulang dapat dibungkus sekali dan dipanggil dengan nama di mana saja.

Fungsi menerima masukan dan menghasilkan keluaran#

Fungsi bekerja seperti mesin dengan pintu masuk dan pintu keluar, yaitu argumen masukan yang diberikan pemanggil dan keluaran yang dikembalikan setelah badan fungsi selesai dihitung. Fungsi mean dan max yang dipakai sejak modul matriks bekerja dengan cara itu, dan fungsi buatan sendiri mengikuti pola yang sama. Pemanggilan berikut memasukkan satu array dan menerima satu nilai dari masing-masing fungsi.

matlab Memanggil fungsi bawaan dengan masukan dan keluaran
nilai = [78 85 90];
fprintf('rerata   : %.1f\n', mean(nilai));
fprintf('terbesar : %d\n', max(nilai));
text Keluaran
rerata   : 84.3
terbesar : 90

Tanpa fungsi, perhitungan yang sama harus ditulis ulang di setiap tempat yang membutuhkannya, dan setiap salinan menjadi kesempatan untuk salah ketik. Fungsi menutup risiko itu karena rumusnya ditulis sekali di satu berkas, lalu semua pemanggil memakai salinan logika yang identik. Perubahan pada rumus cukup dilakukan satu kali dan langsung berlaku untuk seluruh pemanggil.

Anatomi berkas fungsi#

Definisi fungsi dimulai dengan kata kunci function, dilanjutkan daftar keluaran di kiri tanda sama dengan, nama fungsi, lalu daftar argumen masukan di dalam kurung. Pada baris function y = kuadrat(x), fungsi bernama kuadrat menerima satu masukan x dan mengembalikan satu keluaran y. Definisi ditutup dengan end, dan blok komentar tepat di bawah baris function menjadi teks bantuannya sebagaimana dibahas pada topik komentar dan seksi.

matlab kuadrat.m
function y = kuadrat(x)
% KUADRAT menghitung kuadrat tiap elemen masukan.
%   y = KUADRAT(x) sama dengan x.^2.
%   Tanpa argumen, contoh 0:3 dipakai sebagai masukan.

if nargin < 1
  x = 0:3;
end
y = x.^2;
end

Berbeda dari skrip, berkas fungsi tidak menjalankan perhitungan ketika dieksekusi sebagai berkas, karena isinya adalah definisi, bukan daftar perintah. Perintah berikut selesai tanpa mencetak apa pun, dan hal itu adalah perilaku yang benar.

bash
# jalankan berkas fungsi: tanpa keluaran karena isinya hanya definisi
octave --quiet kuadrat.m 2>/dev/null

Operator .^ pada badan fungsi menghitung kuadrat tiap elemen, sehingga fungsi ini melayani skalar maupun array tanpa perubahan kode. Blok if nargin < 1 memasang masukan contoh 0:3 bila fungsi dipanggil tanpa argumen, dan mekanisme nargin dibahas pada bagian akhir topik ini.

Memanggil fungsi buatan sendiri#

Fungsi dipanggil dengan namanya diikuti argumen di dalam kurung, baik dari Command Window maupun dari skrip lain, dengan syarat berkas fungsi berada pada folder aktif atau path. Pemanggilan berikut menguji kuadrat pada satu bilangan dan pada satu vektor.

matlab Memanggil fungsi kuadrat
kuadrat(5)
kuadrat([1 2 3 4])
text Keluaran
ans = 25
ans =

    1    4    9   16

Pemanggilan tanpa penugasan menempatkan hasil pada variabel ans dan menampilkannya, sedangkan penugasan seperti hasil = kuadrat(5) menyimpan hasilnya ke variabel bernama. Argumen boleh berupa harfiah, variabel, maupun hasil pemanggilan fungsi lain, dan nilainya disalin ke parameter x saat pemanggilan berlangsung. Karena badan fungsi memakai .^, pemanggilan dengan array menghasilkan array dengan bentuk yang sama tanpa perubahan apa pun pada definisi.

Workspace fungsi terpisah dari pemanggil#

Variabel di dalam fungsi hidup pada ruang kerja tersendiri yang diciptakan saat pemanggilan dan lenyap saat pemanggilan selesai. Parameter x dan variabel perantara fungsi tidak pernah muncul pada workspace pemanggil, sehingga pemanggilan fungsi tidak mengotori sesi. Pemeriksaan berikut membuktikan hal itu setelah pemanggilan kuadrat.

matlab Workspace pemanggil tetap bersih
y = kuadrat(7);
exist('x', 'var')
exist('y', 'var')
text Keluaran
ans = 0
ans = 1

Nilai nol menandakan x tidak hidup sebagai variabel pada workspace pemanggil meskipun fungsi barusan memakai parameter bernama x, sedangkan nilai satu menandakan y hidup karena memang ditugaskan oleh pemanggil. Perilaku ini adalah kebalikan dari skrip yang berbagi workspace dengan Command Window, dan perbedaan itulah yang membuat fungsi aman dipanggil dari banyak tempat tanpa saling menimpa. Data yang perlu dibawa keluar dari fungsi harus lewat keluaran, bukan lewat variabel sesi.

Argumen masukan dan nargin#

Fungsi nargin menghitung banyak argumen yang benar-benar diberikan pada satu pemanggilan. Kuadrat memakai nilai itu untuk memasang masukan contoh bila pemanggilan datang tanpa argumen, sehingga fungsi tetap berjalan dan menunjukkan bentuk keluarannya.

matlab Pemanggilan tanpa argumen memakai masukan contoh
kuadrat()
text Keluaran
ans =

   0   1   4   9

Pola if nargin < 1 lalu mengisi nilai bawaan adalah idiom yang sering dijumpai pada fungsi yang memiliki argumen opsional. Nilai bawaan membuat fungsi nyaman dipanggil dari Command Window untuk sekadar mencoba, sementara pemanggilan sungguhan tetap memberikan argumen secara eksplisit. Penghitungan yang sama juga menjadi dasar pemanggilan yang mengharapkan jumlah keluaran berubah, dan mekanisme itu dibahas pada topik keluaran ganda.

Kesalahan umum#

  • Nama berkas yang berbeda dari nama fungsi. Pemanggilan kuadrat mencari berkas kuadrat.m, sehingga definisi yang tersimpan sebagai kuadrat2.m tidak pernah ditemukan dan pemanggilan berakhir dengan pesan nama tidak dikenal. Simpan berkas dengan nama yang persis sama dengan nama fungsinya.
  • End yang hilang atau dicampur. Pada berkas yang memuat beberapa definisi, MATLAB menolak campuran fungsi yang ditutup end dan yang dibiarkan terbuka, dan kekeliruan ini muncul sebagai error parsing sebelum program sempat berjalan. Tutup setiap definisi dengan end agar aman pada kedua implementasi.
  • Mengharapkan variabel fungsi muncul di workspace. Parameter dan variabel internal hanya hidup selama pemanggilan berlangsung sehingga who tidak menampilkannya. Kembalikan nilai yang perlu diperiksa sebagai keluaran, lalu periksa nilainya dari sisi pemanggil.

Ringkasan#

  • Definisi fungsi ditulis sebagai function y = nama(x) pada berkas .m yang bernama sama dengan fungsinya dan ditutup dengan end.
  • Berkas fungsi hanya mendefinisikan, sedangkan perhitungannya berjalan ketika fungsi dipanggil dengan nama dan argumennya.
  • Variabel di dalam fungsi hidup pada ruang kerja tersendiri dan tidak pernah mengotori workspace pemanggil.
  • nargin menghitung argumen yang diberikan dan menjadi dasar idiom nilai bawaan untuk argumen opsional.

Referensi#