Perbezaan antara Call by Value dan Call by Reference

Isi kandungan:

Anonim

Dalam bahasa pengaturcaraan, fungsi dapat dipanggil dengan dua cara: yang dikenal sebagai Call by Value dan Call by Reference.

Dalam tutorial ini, anda akan belajar,

  • Apakah kaedah panggilan dengan nilai?
  • Apakah kaedah Call by Reference?
  • Contoh kaedah panggilan mengikut nilai
  • Contoh panggilan dengan kaedah rujukan
  • Panggilan mengikut Nilai vs Panggilan mengikut Rujukan
  • Kelebihan menggunakan kaedah Call by value
  • Kelebihan menggunakan kaedah panggilan dengan rujukan
  • Kelemahan penggunaan kaedah Call by value
  • Kelemahan penggunaan kaedah panggilan dengan rujukan

Apakah kaedah Call by Value?

Kaedah panggilan demi nilai menyalin nilai argumen ke dalam parameter formal fungsi tersebut. Oleh itu, perubahan yang dibuat pada parameter fungsi utama tidak mempengaruhi argumen.

Dalam metode melewati parameter ini, nilai parameter sebenarnya disalin ke parameter formal fungsi, dan parameter disimpan di lokasi memori yang berbeza. Oleh itu, sebarang perubahan yang dibuat di dalam fungsi tidak tercermin dalam parameter sebenar pemanggil.

PERBEZAAN UTAMA

  • Dalam kaedah Call by value nilai asal tidak diubah sedangkan, dalam kaedah Call by referensi, nilai asal diubah.
  • Dalam Panggilan berdasarkan nilai, salinan pemboleh ubah diserahkan sedangkan dalam Panggilan dengan rujukan, pemboleh ubah itu sendiri dilalui.
  • Dalam Call by value, argumen sebenar dan formal akan dibuat di lokasi memori yang berbeza sedangkan di Call by referensi, argumen sebenar dan formal akan dibuat di lokasi memori yang sama.
  • Call by value adalah kaedah lalai dalam bahasa pengaturcaraan seperti C ++, PHP, Visual Basic NET, dan C # sedangkan Call by referensi hanya disokong bahasa Java.
  • Panggilan berdasarkan Nilai, pemboleh ubah diteruskan menggunakan kaedah mudah sedangkan Panggilan Melalui Rujukan, penunjuk diperlukan untuk menyimpan alamat pemboleh ubah.

Apakah kaedah Call by Reference?

Panggilan melalui kaedah rujukan menyalin alamat argumen ke dalam parameter formal. Dalam kaedah ini, alamat digunakan untuk mengakses argumen sebenar yang digunakan dalam panggilan fungsi. Ini bermaksud bahawa perubahan yang dibuat dalam parameter mengubah argumen yang lewat.

Dalam kaedah ini, peruntukan memori adalah sama dengan parameter sebenar. Semua operasi dalam fungsi dilakukan pada nilai yang disimpan di alamat parameter sebenarnya, dan nilai yang diubah akan disimpan di alamat yang sama.

Contoh kaedah Panggilan mengikut 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;}

Pengeluaran:

before function calling 10value is 11after function calling 1-0

Kerana pemboleh ubah yang dinyatakan 'a'in main () berbeza dengan pemboleh ubah' x 'dalam kenaikan (). Dalam program ini hanya nama pemboleh ubah yang serupa, tetapi alamat memori mereka berbeza dan disimpan di lokasi memori yang berbeza.

Contoh kaedah Panggilan Melalui Rujukan

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;}

Pengeluaran:

Before call Value of a =10After call Value of a =11

Kerana pemboleh ubah yang dinyatakan 'a' in adalah merujuk / menunjuk ke pemboleh ubah 'a' dalam utama (). Di sini nama pemboleh ubah berbeza, tetapi kedua-duanya menunjuk / merujuk ke lokasi alamat memori yang sama.

Panggilan mengikut Nilai vs Panggilan mengikut Rujukan

Parameter Panggilan mengikut nilai Panggilan melalui rujukan
Definisi Semasa memanggil fungsi, ketika Anda menyampaikan nilai dengan menyalin pemboleh ubah, itu dikenal sebagai "Call By Values." Ketika memanggil fungsi, dalam bahasa pengaturcaraan dan bukannya menyalin nilai pemboleh ubah, alamat pemboleh ubah digunakan ia dikenal sebagai "Panggilan Oleh Rujukan.
Hujah Dalam kaedah ini, salinan pemboleh ubah dihantar. Dalam kaedah ini, pemboleh ubah itu sendiri dilalui.
Kesan Perubahan yang dibuat dalam salinan pemboleh ubah tidak pernah mengubah nilai pemboleh ubah di luar fungsi. Perubahan pemboleh ubah juga mempengaruhi nilai pemboleh ubah di luar fungsi.
Perubahan nilai Tidak membenarkan anda membuat perubahan pada pemboleh ubah sebenar. Membolehkan anda membuat perubahan dalam nilai pemboleh ubah dengan menggunakan fungsi panggilan.
Lulus pemboleh ubah Nilai pemboleh ubah dilalui menggunakan kaedah berterus terang. Pemboleh ubah penunjuk diperlukan untuk menyimpan alamat pemboleh ubah.
Pengubahsuaian nilai Nilai asal tidak diubah suai. Nilai asal diubah suai.
Lokasi Ingatan Hujah sebenar dan formal akan dibuat di lokasi memori yang berbeza Hujah sebenar dan formal akan dibuat di lokasi memori yang sama
Keselamatan Hujah sebenarnya tetap selamat kerana tidak dapat diubah secara tidak sengaja. Hujah sebenarnya tidak Selamat. Mereka boleh diubah suai secara tidak sengaja, jadi anda perlu menangani operasi argumen dengan berhati-hati.
Lalai Lalai dalam banyak bahasa pengaturcaraan seperti C ++. PHP. Visual Basic NET, dan C #. Ia disokong oleh kebanyakan bahasa pengaturcaraan seperti JAVA, tetapi tidak seperti lalai.

Kelebihan menggunakan kaedah Call by value

Kebaikan / kebaikan panggilan dengan kaedah nilai:

  • Kaedahnya tidak mengubah pemboleh ubah asal, jadi ia menyimpan data.
  • Apabila suatu fungsi disebut, jangan sekali-kali mempengaruhi isi kandungan hujah sebenar.
  • Nilai argumen sebenar diteruskan ke argumen formal, sehingga setiap perubahan yang dibuat dalam argumen formal tidak mempengaruhi kes-kes yang sebenarnya.

Kelebihan menggunakan kaedah panggilan dengan rujukan

Kelebihan menggunakan kaedah panggilan dengan kaedah rujukan:

  • Fungsi dapat mengubah nilai argumen, yang cukup berguna.
  • Data tidak membuat pendua kerana hanya menyimpan satu nilai yang membantu anda menjimatkan ruang memori.
  • Dalam kaedah ini, tidak ada salinan hujah yang dibuat. Oleh itu ia diproses dengan pantas.
  • Membantu anda untuk mengelakkan perubahan yang dilakukan secara tidak sengaja
  • Seseorang yang membaca kod tidak pernah tahu bahawa nilainya dapat diubah dalam fungsi.

Kelemahan penggunaan kaedah Call by value

Berikut adalah kelebihan / kekurangan utama panggilan dengan kaedah nilai:

  • Perubahan pada parameter sebenar juga dapat mengubah pemboleh ubah argumen yang sesuai
  • Dalam kaedah ini, argumen mestilah pemboleh ubah.
  • Anda tidak boleh mengubah pemboleh ubah secara langsung dalam badan fungsi.
  • Hujah kadang-kadang boleh menjadi ungkapan yang kompleks
  • Terdapat dua salinan yang dibuat untuk pemboleh ubah yang sama yang tidak cekap ingatan.

Kelemahan penggunaan kaedah panggilan dengan rujukan

Berikut adalah kelebihan utama menggunakan kaedah panggilan dengan rujukan:

  • Jaminan tidak batal yang kuat. Fungsi yang mengambil rujukan perlu memastikan bahawa inputnya tidak kosong. Oleh itu, semakan tidak perlu dibuat.
  • Melalui rujukan menjadikan fungsi tidak murni secara teori.
  • Jaminan seumur hidup adalah masalah besar dengan rujukan. Ini secara khusus berbahaya ketika bekerja dengan program lambdas dan program multi-utas.