Parameter Passing
Ketika menulis code program, tentu saja kita tidak akan lepas dari yang namanya Function dan Procedure. Yang dimana ketika memanggil Function atau Procedure tersebut, sering kali kita membutuhkan sebuah mekanisme untuk mengirim nilai dari luar ke dalam Function atau Procedure tersebut agar bisa diolah sesuai kebutuhan nantinya. Proses tersebut kita kenal juga dengan nama Parameter Passing, dimana nilai asli yang akan kita kirim ke Function atau Procedure dinamakan dengan Parameter Aktual sedangkan nilai penampung yang terdapat pada Header sebuah Function atau Procedure itu dinamakan Parameter Formal.
Parameter Passing sendiri memiliki beberapa jenis, dan berikut merupakan penjelasannya :
- Pass by Value
Cara kerjanya adalah ketika Function atau Procedure menerima data dari luar (Parameter Aktual), maka di level memori sebenarnya variabel lokal (Parameter Formal) yang ada di dalam Function atau Procedure tersebut akan melakukan duplikasi data dari Parameter Aktual dan disimpan pada alamat memori yang berbeda sehingga perubahan data apapun yang terjadi pada variabel lokal tidak akan merubah isi dari Parameter Aktualnya.
Karena sifatnya itu, Pass by Value bisa dikatakan aman karena tidak akan merubah data aslinya meskipun di dalam Function atau Procedure tersebut telah terjadi kesalahan sehingga mengakibatkan perubahan data pada variabel lokal yang tidak sesuai keinginan. Namun dibalik itu, jika data yang di lempar ke dalam Function atau Procedure ukurannya sangat besar maka ini bisa menjadi masalah karena ukuran memori akan membengkak hingga 2 kali lipat dikarenakan sifat dari Pass by Value itu sendiri yaitu melakukan duplikasi data.
Untuk lebih menggambarkan cara kerja dari Pass by Value ini di level memori, maka mari saya coba gambarkan :
Dan untuk lebih memahami lebih dalam mengenai cara implementasinya di dalam code, berikut ini merupakan contoh di dalam bahasa c++ :
// pass_by_value.cpp
#include <iostream>
using namespace std;
int add(int a, int b) {
// data parameter formal berubah, dan tidak berpengaruh ke parameter aktualnya.
a = a + 1;
b = b + 10;
cout<<"parameter formal 1 : "<<a<<endl;
cout<<"parameter formal 2 : "<<b<<endl;
return a + b;
}
int main()
{
int num1=10;
int num2=15;
int sum;
sum=add(num1,num2);
// data parameter aktual tidak berubah meskipun di dalam fungsi terjadi perubahan data.
cout<<"parameter aktual 1 : "<<num1<<endl;
cout<<"parameter aktual 2 : "<<num2<<endl;
return sum;
}
// cara menjalankan program :
// - cd your_folder
// - g++ pass_by_value.cpp -o test
// - ./test- Pass by Pointer
Cara kerjanya adalah ketika Function atau Procedure menerima data dari luar (Parameter Aktual), maka di level memori sebenarnya variabel lokal (Parameter Formal) yang ada di dalam Function atau Procedure tersebut hanya akan menerima alamat memori dari Parameter Aktual yang sebelumnya telah dikirim dari luar. Oleh karena itu perubahan data apapun yang terjadi pada variabel lokal akan merubah isi data dari parameter aktualnya, dengan kata lain kesalahan sekecil apapun yang terjadi pada variabel lokal bisa berakibat sangat fatal.
Karena sifatnya itu, Pass by Pointer akan sangat efisien ketika harus bekerja dengan data yang sangat besar karena akan langsung diarahkan ke alamat asli dari data tersebut. Namun dibalik itu, jika Function atau Procedure menerima data dari luar (Parameter Aktual) berupa null pointer maka jika tidak di handle dengan baik maka bisa mengakibatkan aplikasi crash.
Get Solehudin MQ’s stories in your inbox
Join Medium for free to get updates from this writer.
Untuk lebih menggambarkan cara kerja dari Pass by Pointer ini di level memori, maka mari saya coba gambarkan :
Dan untuk lebih memahami lebih dalam mengenai cara implementasinya di dalam code, berikut ini merupakan contoh di dalam bahasa c++ :
// pass_by_pointer.cpp
#include <iostream>
using namespace std;
// prosedur menerima parameter berupa pointer, contoh : int *a.
void add(int *a, int *b) {
// data parameter formal berubah, akan berpengaruh ke parameter aktualnya.
// untuk mengubah nilai gunakan deferencing, contoh : *a.
*a = *a + 1;
*b = *b + 10;
cout<<"parameter formal 1 : "<<*a<<endl;
cout<<"parameter formal 2 : "<<*b<<endl;
}
int main()
{
int num1=10;
int num2=15;
// kirimkan parameter sebagai alamat memori, contoh : &num1.
add(&num1,&num2);
// data parameter aktual ikut berubah jika di dalam fungsi terjadi perubahan data.
cout<<"parameter aktual 1 : "<<num1<<endl;
cout<<"parameter aktual 2 : "<<num2<<endl;
return num1 + num2;
}
// cara menjalankan program :
// - cd your_folder
// - g++ pass_by_pointer.cpp -o test
// - ./test- Pass by Reference
Cara kerjanya adalah ketika Function atau Procedure menerima data dari luar (Parameter Aktual), maka di level memori sebenarnya variabel lokal (Parameter Formal) yang ada di dalam Function atau Procedure tersebut hanya akan menerima Alias (1 alamat memori tapi punya 2 nama) dari Parameter Aktual yang sebelumnya telah dikirim dari luar. Oleh karena itu sebenarnya cara kerjanya mirip dengan Pass by Pointer, namun dibekali kelebihan yaitu referensi tidak boleh null ketika dilempar ke Function atau Procedure sehingga lebih aman.
Karena sifatnya itu, Pass by Reference akan memiliki kode yang lebih mudah dibaca serta lebih aman dibandingkan Pass by Pointer. Namun dibalik itu, secara visual Parameter Aktual yang di lempar ke Function atau Procedure akan jadi mirip dengan Pass by Value sehingga bisa menimbulkan kebingungan.
Untuk lebih menggambarkan cara kerja dari Pass by Reference ini di level memori, maka mari saya coba gambarkan :
Dan untuk lebih memahami lebih dalam mengenai cara implementasinya di dalam code, berikut ini merupakan contoh di dalam bahasa c++ :
// pass_by_reference.cpp
#include <iostream>
using namespace std;
// prosedur menerima parameter berupa alias, contoh : &a.
void add(int &a, int &b) {
// data parameter formal berubah, akan berpengaruh ke parameter aktualnya.
a = a + 1;
b = b + 10;
cout<<"parameter formal 1 : "<<a<<endl;
cout<<"parameter formal 2 : "<<b<<endl;
}
int main()
{
int num1=10;
int num2=15;
add(num1,num2);
// data parameter aktual ikut berubah jika di dalam fungsi terjadi perubahan data.
cout<<"parameter aktual 1 : "<<num1<<endl;
cout<<"parameter aktual 2 : "<<num2<<endl;
return num1 + num2;
}
// cara menjalankan program :
// - cd your_folder
// - g++ pass_by_reference.cpp -o test
// - ./testKesimpulan dari pembahasan kali ini adalah dengan mengerti cara kerja dari Parameter Passing di level memori, maka sekarang kita akan tahu kapan untuk memakai Pass by Value, Pass by Pointer atau Pass by Reference di kasus yang tepat sehingga penggunaan memori akan lebih efisien serta aman dari aplikasi crash.
Nah teman-teman tadi itu merupakan penjelasan mengenai Parameter Passing, mudah-mudahan bisa bermanfaat. Jika ada hal yang salah dari apa yang saya sampaikan, silahkan sampaikan di kolom komentar agar kita sama-sama belajar. Segitu saja dulu teman-teman tulisan saya kali ini, enjoy!






