Perbedaan antara Panggilan berdasarkan Nilai dan Panggilan berdasarkan Referensi
Perbedaan Utama antara Panggilan berdasarkan Nilai dan Panggilan berdasarkan Referensi
- Dalam metode Panggilan dengan nilai, nilai asli tidak diubah, sedangkan dalam metode Panggilan dengan referensi, nilai asli diubah.
- Dalam Panggilan berdasarkan nilai, salinan variabel diteruskan, sedangkan dalam Panggilan berdasarkan referensi, variabel itu sendiri diteruskan.
- Dalam Panggilan berdasarkan nilai, argumen aktual dan formal akan dibuat di lokasi memori yang berbeda, sedangkan dalam Panggilan berdasarkan referensi, argumen aktual dan formal akan dibuat di lokasi memori yang sama.
- Panggilan berdasarkan nilai adalah metode default dalam bahasa pemrograman seperti C++, PHP, Visual Basic NET, dan C#, sedangkan Panggilan dengan referensi hanya didukung di Java bahasa.
- Variabel Panggilan berdasarkan Nilai diteruskan menggunakan metode langsung, sedangkan penunjuk Panggilan dengan Referensi diperlukan untuk menyimpan alamat variabel.
Dalam bahasa pemrograman, fungsi dapat dipanggil dengan dua cara: yang dikenal sebagai Call by Value dan Call by reference.
Apa itu metode Panggilan berdasarkan Nilai?
Metode panggilan berdasarkan nilai menyalin nilai argumen ke dalam parameter formal fungsi tersebut. Oleh karena itu, perubahan yang dilakukan pada parameter fungsi utama tidak mempengaruhi argumen.
Dalam metode penerusan parameter ini, nilai parameter aktual disalin ke parameter formal fungsi, dan parameter disimpan di lokasi memori berbeda. Jadi setiap perubahan yang dilakukan di dalam fungsi tidak tercermin dalam parameter pemanggil yang sebenarnya.
Apa itu metode Panggilan dengan Referensi?
Metode panggilan dengan referensi menyalin alamat argumen ke dalam parameter formal. Dalam metode ini, alamat digunakan untuk mengakses argumen sebenarnya yang digunakan dalam pemanggilan fungsi. Artinya, perubahan yang dilakukan pada parameter mengubah argumen yang lewat.
Dalam metode ini, alokasi memori sama dengan parameter sebenarnya. Semua operasi dalam fungsi dilakukan pada nilai yang disimpan di alamat parameter sebenarnya, dan nilai yang diubah akan disimpan di alamat yang sama.
Contoh Kode C dari metode Panggilan berdasarkan Nilai
void main() { int a = 10, void increment(int); Cout << "before function calling" << a; increment(a); Cout << "after function calling" << a; getch(); void increment(int x) { int x = x + 1; Cout << "value is" << x; }
Keluaran:
before function calling 10 value is 11 after function calling 1-0
Karena variabel yang dideklarasikan 'a'in main() berbeda dengan variabel 'x' di instage(). Dalam program ini hanya nama variabel yang mirip, tetapi alamat memorinya berbeda dan disimpan di lokasi memori berbeda.
Java Contoh Kode Panggilan dengan metode Referensi
Public static void main(string args[]) { int a = 10; System.out.println("Before call Value of a = ", a); Void increment(); System.out.println("After call Value of a = ", a); } Void increment(int x) { int x = x + 1; }
Keluaran:
Before call Value of a =10 After call Value of a =11
Karena variabel yang dideklarasikan 'a' di dalam merujuk/menunjuk ke variabel 'a' di main(). Di sini nama variabel berbeda, tetapi keduanya menunjuk/merujuk ke lokasi alamat memori yang sama.
Panggilan berdasarkan Nilai vs. Panggilan berdasarkan Referensi
Parameters | Panggil berdasarkan nilai | Panggil dengan referensi |
---|---|---|
Definisi | Saat memanggil suatu fungsi, saat Anda meneruskan nilai dengan menyalin variabel, ini dikenal sebagai “Panggilan Berdasarkan Nilai”. | Saat memanggil suatu fungsi, dalam bahasa pemrograman alih-alih menyalin nilai variabel, alamat variabel yang digunakan dikenal sebagai “Panggilan Dengan Referensi. |
kasus | Dalam metode ini, salinan variabel dilewatkan. | Dalam metode ini, variabel itu sendiri dilewatkan. |
Efek | Perubahan yang dilakukan pada salinan variabel tidak pernah mengubah nilai variabel di luar fungsi. | Perubahan variabel juga mempengaruhi nilai variabel di luar fungsi. |
Perubahan nilai | Tidak mengizinkan Anda membuat perubahan apa pun pada variabel sebenarnya. | Memungkinkan Anda membuat perubahan nilai variabel dengan menggunakan pemanggilan fungsi. |
Melewati variabel | Nilai variabel diteruskan menggunakan metode langsung. | Variabel penunjuk diperlukan untuk menyimpan alamat variabel. |
Modifikasi nilai | Nilai asli tidak diubah. | Nilai aslinya diubah. |
Lokasi Memori | Argumen aktual dan formal akan dibuat berbeda lokasi memori |
Argumen aktual dan formal akan dibuat di tempat yang sama lokasi memori |
Safety/keselamatan | Argumen sebenarnya masih ada aman karena tidak dapat diubah secara tidak sengaja. |
Argumen sebenarnya tidak demikian Aman. Mereka bisa menjadi diubah secara tidak sengaja, jadi Anda perlu menangani operasi argumen dengan hati-hati. |
Default | Default di banyak pemrograman bahasa seperti C++.PHP. Visual Basic NET, dan C#. |
Hal ini didukung oleh sebagian besar bahasa pemrograman seperti JAVA, tapi tidak sebagai default. |
Keuntungan menggunakan metode Panggilan berdasarkan nilai di C
Kelebihan/manfaat panggilan berdasarkan nilai di C:
- Metode ini tidak mengubah variabel asli, sehingga mempertahankan data.
- Setiap kali suatu fungsi dipanggil, jangan pernah memengaruhi konten sebenarnya dari argumen sebenarnya.
- Nilai argumen aktual diteruskan ke argumen formal, sehingga perubahan apa pun yang dilakukan pada argumen formal tidak mempengaruhi kasus sebenarnya.
Keuntungan menggunakan metode Panggilan dengan referensi
Kelebihan menggunakan metode panggilan dengan referensi:
- Fungsi tersebut dapat mengubah nilai argumen, yang cukup berguna.
- Itu tidak membuat data duplikat karena hanya menyimpan satu nilai yang membantu Anda menghemat ruang memori.
- Dalam metode ini, tidak ada salinan argumen yang dibuat. Oleh karena itu diproses dengan sangat cepat.
- Membantu Anda menghindari perubahan yang dilakukan karena kesalahan
- Seseorang yang membaca kode tidak pernah tahu bahwa nilainya dapat diubah dalam fungsinya.
Kerugian menggunakan metode Panggilan dengan nilai
Berikut adalah kekurangan/kekurangan utama dari panggilan dengan metode nilai:
- Perubahan pada parameter aktual juga dapat mengubah variabel argumen terkait
- Dalam metode ini, argumen harus berupa variabel.
- Anda tidak dapat secara langsung mengubah variabel di badan fungsi.
- Kadang-kadang argumen bisa berupa ekspresi yang kompleks
- Ada dua salinan yang dibuat untuk variabel yang sama yang tidak efisien dalam memori.
Kerugian menggunakan Panggilan dengan metode referensi
Berikut adalah kelemahan utama dalam menggunakan metode panggilan dengan referensi:
- Jaminan non-null yang kuat. Suatu fungsi yang mengambil referensi perlu memastikan bahwa inputnya bukan nol. Oleh karena itu, pemeriksaan nol tidak perlu dilakukan.
- Melewati referensi membuat fungsi tersebut tidak murni secara teoritis.
- Jaminan seumur hidup adalah masalah besar dalam hal referensi. Ini khususnya berbahaya ketika bekerja dengan lambda dan program multi-thread.