Ada berbagai cara di mana data parameter dapat dilewatkan ke dalam dan keluar dari metode dan fungsi. Mari kita asumsikan bahwa fungsi B () dipanggil dari fungsi lain A () . Dalam hal ini A disebut "fungsi pemanggil" dan B disebut "fungsi yang disebut fungsi callee" . Juga, argumen yang dikirim A ke B disebut argumen aktual dan parameter B disebut argumen formal .
Terminologi
- Parameter Formal: Suatu variabel dan jenisnya saat muncul dalam prototipe fungsi atau metode.
- Parameter Aktual: Variabel atau ekspresi yang terkait dengan parameter formal yang muncul di panggilan fungsi atau metode di lingkungan panggilan.
- Mode:
- IN: Mengirim info dari penelepon ke calle.
- KELUAR: Callee menulis nilai dalam penelepon.
- IN / OUT: Caller memberi tahu callee nilai variabel, yang dapat diperbarui dengan callee.
Metode penting dari Parameter Passing
- Pass By Value: Metode ini menggunakan semantik dalam mode . Perubahan yang dilakukan pada parameter formal tidak dapat dikirim kembali ke pemanggil.
Setiap modifikasi pada variabel parameter formal di dalam fungsi atau
metode yang dipanggil hanya memengaruhi lokasi penyimpanan yang terpisah
dan tidak akan tercermin dalam parameter aktual di lingkungan
pemanggilan. Metode ini juga disebut sebagai panggilan oleh nilai .
// C program to illustrate
// call by value
#include <stdio.h>
void
func(
int
a,
int
b)
{
a += b;
printf
(
"In func, a = %db = %d\n"
, a, b);
}
int
main(
void
)
{
int
x = 5, y = 7;
// Passing parameters
func(x, y);
printf
(
"In main, x = %dy = %d\n"
, x, y);
return
0;
}
Dalam func, a = 12 b = 7 Secara utama, x = 5 y = 7
Bahasa seperti C, C ++, Java mendukung jenis pemindahan parameter ini.
Kekurangan:
- Inefisiensi dalam alokasi penyimpanan
- Untuk objek dan array, semantik salinan mahal
- Lulus dengan referensi (aliasing): Teknik ini menggunakan semantik in / out-mode . Perubahan yang dilakukan pada parameter formal dapat dikirim kembali ke pemanggil melalui parameter yang lewat.
Setiap perubahan pada parameter formal tercermin dalam parameter aktual
di lingkungan pemanggilan saat parameter formal menerima referensi
(atau penunjuk) ke data aktual. Metode ini juga disebut sebagai panggilan dengan referensi . Metode ini efisien baik dalam waktu maupun ruang.
// C program to illustrate
// call by reference
#include <stdio.h>
void
swapnum(
int
* i,
int
* j)
{
int
temp = *i;
*i = *j;
*j = temp;
}
int
main(
void
)
{
int
a = 10, b = 20;
// passing parameters
swapnum(&a, &b);
printf
(
"a is %d and b is %d\n"
, a, b);
return
0;
}
a adalah 20 dan b adalah 10
C dan C ++ keduanya mendukung panggilan dengan nilai serta panggilan dengan referensi sedangkan Java tidak mendukung panggilan dengan referensi.
Kekurangan:
- Banyak skenario potensial dapat terjadi
- Terkadang program sulit dipahami
Metode lain dari Parameter Passing
Teknik-teknik ini lebih tua dan digunakan dalam bahasa pemrograman sebelumnya seperti Pascal, Algol dan Fortran. Teknik-teknik ini tidak berlaku dalam bahasa tingkat tinggi. - Lulus oleh Hasil: Metode ini menggunakan semantik mode keluar . Tepat sebelum kontrol ditransfer kembali ke pemanggil, nilai parameter formal ditransmisikan kembali ke parameter yang sebenarnya. Metode ini kadang-kadang disebut panggilan dengan hasil . Secara umum, teknik by pass diimplementasikan oleh copy.
- Lulus oleh Nilai-Hasil: Metode ini menggunakan semantik in / out-mode . Ini adalah kombinasi Pass-by-Value dan Pass-by-result. Tepat sebelum kontrol ditransfer kembali ke pemanggil, nilai parameter formal ditransmisikan kembali ke parameter aktual. Metode ini kadang-kadang disebut sebagai panggilan oleh nilai-hasil
- Lulus dengan nama: Teknik ini digunakan dalam bahasa pemrograman seperti Algol . Dalam teknik ini, " nama " simbolis dari suatu variabel dilewatkan, yang memungkinkan keduanya diakses dan diperbarui.
Contoh:
Untuk menggandakan nilai C [j] , Anda dapat memasukkan namanya (bukan nilainya) ke dalam prosedur berikut.prosedur ganda (x); nyata x; mulai x: = x * 2 akhir;
Secara umum, efek pass-by-name adalah untuk mengganti argumen secara tekstual dalam panggilan prosedur untuk parameter yang sesuai di tubuh prosedur.
Implikasi mekanisme Pass-by-Name:
- Ekspresi argumen dievaluasi ulang setiap kali parameter formal dilewatkan.
- Prosedur dapat mengubah nilai variabel yang digunakan dalam ekspresi argumen dan karenanya mengubah nilai ekspresi.
Artikel ini disumbangkan oleh Krishna Bhatia . Jika Anda menyukai GeeksforGeeks dan ingin berkontribusi, Anda juga dapat menulis artikel menggunakan berkontribusi.geeksforgeeks.org atau mengirim artikel Anda ke berkontribusi@geeksforgeeks.org. Lihat artikel Anda yang muncul di halaman utama GeeksforGeeks dan bantu Geeks lainnya.
Silakan tulis komentar jika Anda menemukan sesuatu yang salah, atau Anda ingin berbagi informasi lebih lanjut tentang topik yang dibahas di atas.
Silakan tulis komentar jika Anda menemukan sesuatu yang salah, atau Anda ingin berbagi informasi lebih lanjut tentang topik yang dibahas di atas.
No comments:
Post a Comment