Keluhan klasik rekayasa perangkat lunak: “di komputer saya jalan.” Kode MATLAB jarang gagal karena logikanya — kegagalan biasanya datang dari lingkungan: toolbox yang tidak terpasang, versi MATLAB yang lebih tua, atau fungsi unduhan File Exchange yang hilang. Dependency management adalah kebiasaan mendeklarasikan, mengaudit, dan menyediakan rencana cadangan untuk semua kebutuhan tersebut. Chapter ini membahas:
- Peta ketergantungan proyek MATLAB dan deklarasi versi minimal (
verLessThanserta padanan manualnya). - Audit ketersediaan fungsi dengan
existdan fallback saat toolbox absen.
Peta Ketergantungan MATLAB #
Berbeda dengan ekosistem npm atau pip, MATLAB tidak punya berkas manifes dependensi otomatis. Ketergantungan proyek kita datang dari empat sumber:
| Sumber | Contoh | Cara deklarasikan |
|---|---|---|
| Toolbox | fitlm (Statistics and ML), image | README + verLessThan |
| Versi MATLAB | fungsi R2020b+ seperti readlines | README + guard versi |
| Fungsi eksternal | unduhan File Exchange | folder +lib/ (vendor) + catatan lisensi |
| Data/sistem eksternal | data_penjualan.csv, basis data | README + chapter Reproducible Projects |
Deklarasi Versi Minimal #
Guard versi menjaga kode gagal cepat dan jelas, bukan error membingungkan di tengah jalanan. MATLAB menyediakan verLessThan(toolbox, version) yang mengembalikan true bila versi toolbox lebih tua dari batas (MATLAB-only, sintaks terverifikasi dokumentasi resmi):
% MATLAB: guard versi (MATLAB-ONLY, tidak diuji runner)
if verLessThan('matlab', '8.4') % contoh resmi: lebih tua dari R2014b
% jalur kode untuk MATLAB R2014a dan lebih lama
else
% jalur kode untuk MATLAB R2014b dan lebih baru
endDokumentasi resmi menyarankan isMATLABReleaseOlderThan untuk memeriksa rilis MATLAB saat ini, sementara verLessThan tetap dipakai untuk toolbox. Keduanya tidak tersedia di Octave (memanggil verLessThan('matlab', ...) di Octave menghasilkan galat “package matlab is not installed”), jadi contoh.m memakai padanan manual yang berjalan di dua engine:
versi = version();
fprintf('version() = %s\n', versi);
fprintf('versiCukup(''10.3.0'', ''9.8'') = %d (R2020a = 9.8)\n', ...
versiCukup('10.3.0', '9.8'));
fprintf('versiCukup(''9.7.1'', ''9.8'') = %d\n', versiCukup('9.7.1', '9.8'));
fprintf('versiCukup(''9.10'', ''9.9'') = %d (9.10 > 9.9)\n', ...
versiCukup('9.10', '9.9'));
assert(versiCukup(versi, '9.8'));Mari kita bedah baris-baris kode di atas:
- Baris 1 (
versi = version();): string versi engine yang sedang berjalan —10.3.0pada engine uji ini; MATLAB R2026b menampilkan25.2.0versi mesin masing-masing. - Baris 3-7 (tiga pemanggilan
versiCukup): perbandingan numerik per komponen. Kasus'9.10'vs'9.9'sengaja diuji: perbandingan string murni akan salah ('9.10' < '9.9'secara leksikografis), perbandingan numerik komponen benar (10 > 9). - Baris 8 (
assert(versiCukup(versi, '9.8'))): guard versi pada runtime sungguhan — bila engine terlalu tua, skrip berhenti di baris ini dengan pesan assert, bukan di fungsi jauh di dalam pipeline.
Audit Ketersediaan Fungsi #
Audit menjawab: fungsi apa saja yang proyek pakai, dan apakah tersedia di lingkungan ini? Alatnya exist(nama) — nilai balik bukan nol berarti fungsi/berkas dapat dijangkau dari path:
daftar = {'mean', 'polyfit', 'fitlm', 'ttest', 'pca'};
sumber = {'core MATLAB', 'core MATLAB', ...
'Statistics and ML Toolbox', 'Statistics and ML Toolbox', ...
'Statistics and ML Toolbox'};
fprintf('fungsi status\n');
for k = 1:numel(daftar)
if exist(daftar{k}) > 0
fprintf('%-10s tersedia\n', daftar{k});
else
fprintf('%-10s TIDAK tersedia (%s)\n', daftar{k}, sumber{k});
end
endTabel daftar/sumber adalah manifes dependensi versi manual: satu tempat yang memetakan setiap fungsi non-inti ke toolbox asalnya. Dari hasil audit, kita tahu persis apa yang harus dipasang di komputer baru — atau mana yang perlu fallback.
Fallback Tanpa Toolbox #
Fallback adalah implementasi manual untuk fungsi yang mungkin absen — pola if exist(...), pakai builtin, else pakai fallback, end. Dua contoh teruji di contoh.m: normManual untuk norm vektor dan regresiLinierFallback (least-squares closed-form) pengganti fitlm:
function koef = regresiLinierFallback(x, y)
%REGRESILINIERFALLBACK Regresi linear closed-form tanpa toolbox.
% KOEF = [intercept; slope] lewat rumus least-squares eksak.
xb = mean(x);
yb = mean(y);
slope = sum((x - xb) .* (y - yb)) / sum((x - xb) .^ 2);
intercept = yb - slope * xb;
koef = [intercept; slope];
endRumus closed-form memakai hanya operasi inti (mean, sum, aritmetika vektor) sehingga berjalan di MATLAB versi mana pun tanpa toolbox. Kuncinya: fallback harus menghasilkan nilai yang sama dengan fungsi aslinya — contoh.m membandingkannya dengan polyfit pada data yang sama.
Output yang Dihasilkan (dari contoh.m lengkap):
== Bagian 1: cek versi minimal ==
version() = 10.3.0
versiCukup('10.3.0', '9.8') = 1 (R2020a = 9.8)
versiCukup('9.7.1', '9.8') = 0
versiCukup('9.10', '9.9') = 1 (9.10 > 9.9)
== Bagian 2: audit fungsi ==
fungsi status
mean tersedia
polyfit tersedia
fitlm TIDAK tersedia (Statistics and ML Toolbox)
ttest TIDAK tersedia (Statistics and ML Toolbox)
pca TIDAK tersedia (Statistics and ML Toolbox)
== Bagian 3: fallback tanpa toolbox ==
norm([3 4 12]) = 13.000000 ; manual = 13.000000 ; identik: 1
fallback: slope = 2.0300, intercept = -0.0300
polyfit : slope = 2.0300, intercept = -0.0300
== Bagian 4: pembersihan ==
tidak ada berkas uji: seluruh fungsi adalah local functionIsolasi dan Dokumentasi #
Fungsi pihak ketiga (File Exchange) diisolasi di satu folder — misalnya +lib/ atau external/ — sehingga jelas mana kode kita dan mana kode vendor; pembaruan cukup mengganti satu folder. Setiap unduhan FEX membawa lisensi sendiri (BSD, MIT, GPL, atau MATLAB-only restrictive): catat asal, penulis, dan lisensinya di README karena beberapa lisensi membatasi distribusi ulang. Akhirnya, README menuliskan persyaratan minimum secara eksplisit, misalnya: MATLAB R2020a atau lebih baru; Statistics and Machine Learning Toolbox (opsional — tersedia fallback regresi).
Ringkasan #
Dependensi proyek MATLAB berupa toolbox, versi MATLAB, dan fungsi eksternal. Deklarasikan lewat guard versi (verLessThan di MATLAB; padanan versiCukup yang teruji di dua engine), audit lewat exist dengan manifes fungsi→toolbox, dan sediakan fallback closed-form yang divalidasi identik dengan fungsi aslinya. Fungsi pihak ketiga diisolasi di folder vendor dengan catatan lisensi, dan seluruh persyaratan ditulis di README — sehingga “di komputer saya jalan” berubah menjadi “di komputer mana pun yang memenuhi daftar ini jalan”.