Fungsi tanpa masukan hanya bisa mengerjakan hal yang sama setiap kali dipanggil — seperti printer tanpa kertas masukan yang selalu mencetak halaman yang sama. Parameter list adalah pintu masukan fungsi: di situlah kita mendeklarasikan variabel apa yang fungsi butuhkan, bertipe apa, dan berapa banyak. Nilai yang dikirim pemanggil melalui pintu itu bernama argumen. Pada Chapter ini kita meluruskan dua istilah yang sering tertukar, memahami peran posisi dalam pemetaan nilai, dan mendesain fungsi dengan jumlah parameter yang bervariasi.
Parameter vs Argumen #
Parameter adalah variabel yang DIDEKLARASIKAN di dalam kurung definisi fungsi, sedangkan argumen adalah nilai NYATA yang dikirim saat pemanggilan. Parameter hidup di definisi dan prototipe; argumen hidup di titik panggil. Dua istilah ini sering dipakai bergantian di percakapan santai, tetapi membedakannya membantu saat membaca pesan galat compiler, yang konsisten memakai keduanya secara presisi:
#include <iostream>
#include <string>
// Parameter: variabel masukan di dalam kurung definisi fungsi
void tampilkanProfil(std::string nama, int umur) {
std::cout << nama << " berumur " << umur << " tahun\n";
}
// Parameter bertipe campuran: double, int, dan hasilnya double
double hitungTotal(double harga, int jumlah) {
return harga * jumlah;
}
int main() {
// Argumen: nilai nyata yang dikirim saat pemanggilan
tampilkanProfil("Budi", 21);
tampilkanProfil("Siti", 19);
std::cout << "Total belanja: " << hitungTotal(2500.0, 4) << "\n";
return 0;
}Output yang Dihasilkan:
Budi berumur 21 tahun
Siti berumur 19 tahun
Total belanja: 10000Kode di atas memperlihatkan tiga fakta penting. Pertama, nama dan umur pada Baris 6 adalah parameter; "Budi", 21, dan kawan-kawannya pada Baris 17-18 adalah argumen. Kedua, fungsi yang sama bisa dipanggil berkali-kali dengan argumen berbeda — itu inti penggunaan ulang kode. Ketiga, parameter boleh bertipe campuran: hitungTotal menerima double dan int sekaligus, dan perkaliannya menghasilkan double sesuai aturan konversi tipe yang kita bahas pada Section Variabel dan Tipe Data.
Urutan Argumen: Posisi Menentukan Tujuan #
C++ memetakan argumen ke parameter BERNILAI POSISI: argumen pertama masuk ke parameter pertama, argumen kedua ke parameter kedua, dan seterusnya. Nama parameter tidak punya peran dalam pemetaan — yang dihitung hanyalah posisi dan kesesuaian tipe. Karena itu urutan argumen saat pemanggilan harus dirancang dan dijaga dengan disiplin:
#include <iostream>
#include <string>
// Urutan parameter menentukan argumen mana yang masuk ke mana
void tampilkanKamar(std::string nama, int lantai, double harga) {
std::cout << "Kamar " << nama << " lantai " << lantai
<< ", harga Rp" << harga << "\n";
}
int main() {
tampilkanKamar("Melati", 3, 350000.0);
tampilkanKamar("Kenanga", 7, 500000.0);
return 0;
}Output yang Dihasilkan:
Kamar Melati lantai 3, harga Rp350000
Kamar Kenanga lantai 7, harga Rp500000Bila posisi tertukar — misalnya tampilkanKamar(3, "Melati", 350000.0) — compiler langsung menolaknya karena int tidak bisa menjadi std::string. Bahaya yang lebih licik terjadi bila tipe-nya kebetulan cocok semua: tampilkanKamar(3, "Melati", 350000.0) ditolak, tetapi fungsi dengan dua parameter int akan dengan senang hati menerima argumen yang tertukar urutan. Untuk kasus seperti itu, flag -Wall tidak membantu; penyelamat kita adalah nama parameter yang deskriptif dan konsistensi urutan di seluruh proyek.
Dari Nol Sampai Beberapa Parameter #
Jumlah parameter bebas: nol, satu, dua, hingga yang wajar untuk dibaca. Fungsi tanpa parameter tetap menuliskan kurung kosong (); berikut fungsi dengan nol, tiga, dan dua parameter bertipe berbeda:
#include <iostream>
#include <string>
// Fungsi tanpa parameter sama sekali
void cetakGaris() {
std::cout << "----------------\n";
}
// Tiga parameter dengan tipe berbeda
void buatLaporan(std::string nama, int stok, double harga) {
std::cout << nama << " | stok " << stok << " | Rp" << harga << "\n";
}
// Parameter char dan bool: jumlah param bebas, tipe bebas
void statusProduk(char kode, bool tersedia) {
std::cout << "Kode " << kode << " -> "
<< (tersedia ? "tersedia" : "habis") << "\n";
}
int main() {
cetakGaris();
buatLaporan("Pensil", 120, 2000.0);
buatLaporan("Buku Tulis", 45, 15000.0);
cetakGaris();
statusProduk('A', true);
statusProduk('B', false);
return 0;
}Output yang Dihasilkan:
----------------
Pensil | stok 120 | Rp2000
Buku Tulis | stok 45 | Rp15000
----------------
Kode A -> tersedia
Kode B -> habiscetakGaris membuktikan fungsi tanpa parameter punya nilai guna sendiri — tugas tetapnya mencetak garis pembatas. Pada statusProduk, parameter bool diolah dengan operator ternary yang kita pelajari pada Section Operator untuk memilih teks yang dicetak. Sebagai pedoman desain: tiga atau empat parameter masih nyaman dibaca; bila daftarnya memanjang melewati itu, biasanya ada kumpulan data yang pantas dibungkus — solusinya (struct, dan parameter dengan nilai bawaan) kita bahas di Section berikutnya dan pada Chapter Default Arguments.
Rujukan resmi tentang daftar parameter ada di cppreference: function . Masukan sudah beres; sekarang kita bahas arah keluarnya — nilai kembalian fungsi.