Dalam bahasa pemrograman, fungsi dapat dipanggil dengan dua cara: yang dikenal sebagai Call by Value dan Call by Reference.
Dalam tutorial ini, Anda akan belajar,
- Apa panggilan dengan metode nilai?
- Apa itu metode Panggil dengan Referensi?
- Contoh panggilan dengan metode nilai
- Contoh panggilan dengan metode referensi
- Panggilan berdasarkan Nilai vs. Panggilan dengan Referensi
- Keuntungan menggunakan metode Call by Value
- Keuntungan menggunakan Panggil dengan metode referensi
- Kekurangan menggunakan metode Call by Value
- Kerugian menggunakan Panggil dengan metode referensi
Apa itu metode Call by Value?
Metode panggilan dengan nilai menyalin nilai argumen ke dalam parameter formal fungsi itu. 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 yang berbeda. Jadi setiap perubahan yang dibuat di dalam fungsi tidak tercermin dalam parameter sebenarnya dari pemanggil.
PERBEDAAN UTAMA
- Dalam Panggil dengan metode nilai, nilai asli tidak diubah sedangkan, dalam Panggil dengan metode referensi, nilai asli diubah.
- Dalam Call by value, salinan variabel diteruskan sedangkan di Call by reference, variabel itu sendiri dilewatkan.
- 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 berdasarkan referensi hanya mendukung bahasa Java.
- Call by Value, variabel diteruskan menggunakan metode langsung sedangkan Call by Reference, pointer diperlukan untuk menyimpan alamat variabel.
Apa itu metode Panggil 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. Ini berarti bahwa perubahan yang dilakukan pada parameter mengubah argumen yang lewat.
Dalam metode ini, alokasi memori sama dengan parameter sebenarnya. Semua operasi dalam fungsi tersebut dilakukan pada nilai yang disimpan di alamat parameter aktual, dan nilai yang dimodifikasi akan disimpan di alamat yang sama.
Contoh metode Call by Value
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 10value is 11after function calling 1-0
Karena variabel yang dideklarasikan 'a'in main () berbeda dengan variabel' x 'secara bertahap (). Dalam program ini hanya nama variabel yang serupa, tetapi alamat memorinya berbeda dan disimpan di lokasi memori yang berbeda.
Contoh metode Panggilan dengan Referensi
Public static void(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 =10After call Value of a =11
Karena variabel yang dideklarasikan 'a' in mereferensikan / 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 dengan Referensi
Parameter | Panggilan berdasarkan nilai | Panggil dengan referensi |
---|---|---|
Definisi | Saat memanggil suatu fungsi, saat Anda meneruskan nilai dengan menyalin variabel, itu dikenal sebagai "Panggil Dengan Nilai." | Saat memanggil suatu fungsi, dalam bahasa pemrograman alih-alih menyalin nilai variabel, alamat variabel yang digunakan itu dikenal sebagai "Panggil Dengan Referensi. |
Argumen | Dalam metode ini, salinan variabel diteruskan. | Dalam metode ini, variabel itu sendiri dilewatkan. |
Efek | Perubahan yang dilakukan dalam 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 aktual. | Memungkinkan Anda membuat perubahan nilai variabel dengan menggunakan pemanggilan fungsi. |
Meneruskan variabel | Nilai variabel diteruskan menggunakan metode langsung. | Variabel penunjuk diperlukan untuk menyimpan alamat variabel. |
Modifikasi nilai | Nilai asli tidak diubah. | Nilai asli diubah. |
Lokasi Memori | Argumen aktual dan formal akan dibuat di lokasi memori yang berbeda | Argumen aktual dan formal akan dibuat di lokasi memori yang sama |
Keamanan | Argumen yang sebenarnya tetap aman karena tidak dapat dimodifikasi secara tidak sengaja. | Argumen yang sebenarnya tidak aman. Mereka bisa dimodifikasi secara tidak sengaja, jadi Anda perlu menangani operasi argumen dengan hati-hati. |
Default | Default dalam banyak bahasa pemrograman seperti C ++. PHP. Visual Basic NET, dan C #. | Ini didukung oleh sebagian besar bahasa pemrograman seperti JAVA, tetapi tidak sebagai default. |
Keuntungan menggunakan metode Call by Value
Pro / manfaat dari panggilan dengan metode nilai:
- Metode ini tidak mengubah variabel asli, jadi ini menjaga data.
- Kapan pun suatu fungsi dipanggil, jangan pernah memengaruhi konten sebenarnya dari argumen aktual.
- Nilai argumen aktual diteruskan ke argumen formal, sehingga setiap perubahan yang dilakukan dalam argumen formal tidak mempengaruhi kasus yang sebenarnya.
Keuntungan menggunakan Panggil dengan metode 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 nilai dapat diubah dalam fungsinya.
Kekurangan menggunakan metode Call by Value
Di sini, adalah kekurangan / kekurangan utama dari metode panggilan dengan nilai:
- Perubahan pada parameter aktual juga dapat mengubah variabel argumen yang sesuai
- Dalam metode ini, argumen harus berupa variabel.
- Anda tidak bisa langsung mengubah variabel di badan fungsi.
- Terkadang argumen bisa menjadi ekspresi yang kompleks
- Ada dua salinan yang dibuat untuk variabel yang sama yang tidak efisien dalam memori.
Kerugian menggunakan Panggil dengan metode referensi
Di sini, adalah kontra utama menggunakan metode panggilan dengan referensi:
- Jaminan kuat bukan nol. Fungsi yang mengambil referensi perlu memastikan bahwa inputnya bukan null. Oleh karena itu, pemeriksaan nol tidak perlu dilakukan.
- Melewati referensi membuat fungsi tidak murni secara teoritis.
- Jaminan seumur hidup adalah masalah besar dengan referensi. Ini sangat berbahaya saat bekerja dengan program lambda dan multi-utas.