Sebelum membahas perbedaan antara Call by Value dan Call by Reference, mari kita mengenal keduanya. pengantarTeknik modularisasi dalam ABAP adalah cara untuk menulis kode dalam blok pemrosesan yang berbeda seperti subrutin, Modul Fungsi, dan objek ABAP. Jika blok-blok ini memiliki antarmuka parameter apa pun, saat memanggilnya, blok tersebut harus meneruskan nilai ke semua antarmuka parameter formal. Blok dengan parameter ini dapat dipanggil melalui Call by Value atau Call by Reference. Panggilan berdasarkan NilaiDalam Call by Value, nilai parameter aktual disalin ke parameter formal fungsi. Nilai dari kedua jenis parameter tersebut disimpan di lokasi memori yang berbeda. Lokasi memori dari parameter formal dialokasikan saat fungsi/subrutin dipanggil dan dibebaskan saat fungsi/subrutin kembali. Referensi ke parameter formal merujuk ke memori unik dan hanya diketahui dalam fungsi/subrutin. Setiap perubahan yang dilakukan di dalam fungsi/subrutin tidak tercermin dalam parameter aktual. Panggilan dengan ReferensiDalam Call by Reference, alamat parameter aktual disalin ke parameter formal fungsi. Referensi ke parameter formal mereferensikan memori yang sama dengan parameter aktual. Setiap perubahan yang dilakukan di dalam fungsi/subrutin tercermin dalam parameter aktual yaitu semua operasi dilakukan pada nilai yang disimpan di alamat parameter aktual, dan nilai yang dimodifikasi disimpan di alamat yang sama. Sekarang, mari kita lihat perbedaan mereka.
Hei yang disana, Tim kami sedang mengerjakan artikel ini. Sampai sekarang hanya Kursus Pemula ABAP yang Live. Akan segera memperbaruinya.
Selamat datang di blog kodeprogramcpp. Pada kali ini, penulis ingin membahas sebuah topik mengenai pemanggilan "Arguments atau Parameter Fungsi dengan Metode Call by Value" pada bahasa C. Topik ini merupakan topik lanjutan dari topik sebelumnya tentang Memahami Penggunaan Function. Jika teman-teman masih bingung dalam memahami penggunaan function, ada baiknya membaca postingan tersebut terlebih dahulu agar nantinya lebih mudah dalam memahami apa yang penulis sampaikan di postingan ini. Oke, mari ke topik intinya dan mulai detik ini kata arguments yang biasa kita ucapkan dalam hal ini akan diganti dengan kata parameter saja, biar lebih akrab. hehehe... :) Siap-siap atur kuda-kuda biar tidak terjatuh dalam kebelengguan. :) Pada dasarnya, parameter yang diberikan ke dalam sebuah function pada bahasa C itu bersifat "call by value". Artinya ialah setiap fungsi yang dipanggil dan memiliki parameter, fungsi tersebut hanya akan mengambil nilai dari variabel original yang diberikan dan disimpan ke dalam variabel sementara agar tetap terjaga selama penggunaan di dalam fungsi. Dengan begitu, dapat diambil kesimpulan bahwa sebuah fungsi secara mendasar tidak akan merubah nilai dari variabel yang kita berikan ke dalam fungsi tersebut, itulah mengapa sebabnya pemanggilan fungsi dengan passing paramater cara ini disebut dengan call by value. Jadi, ketika kita memanggil sebuah fungsi yang sudah kita deklarasikan, maka secara diam-diam dan privasi, si bahasa C akan menyalin nilai-nilai dari variabel (original) yang kita berikan sebagai argumen ke sebuah variabel sementara. Tapi kan variabel yang kita berikan ke si fungsi itu variabel original? Nah, begitu si fungsi dijalankan, maka si bahasa C secara diam-diam juga menjadikan variabel itu sebagai variabel sementara di dalam fungsi. Oleh karena itulah, nilai yang diberikan sebelumnya ke si variabel (original) tidak akan berubah, apapun yang terjadi tidak akan berubah meskipun kita memanggil si fungsi berkali-kali. :D Oke, mari bersama-sama kita perhatikan contoh kode program bahasa c yang sudah penulis persiapkan untuk teman-teman sekalian. /* * Name Program : Function Arguments Call by Value * Author : Hendro Pramana Sinaga * Date Publish : 24 August 2014 */ #include <stdio.h> void tukarNilai(int, int); //mendeklarasikan fungsi int main() { int n1, n2; printf("Berikan nilai n1 = "); scanf("%d", &n1); printf("Berikan nilai n2 = "); scanf("%d", &n2); //panggil fungsi dengan call by value tukarNilai(n1, n2); //periksa nilai n1 dan n2 sekarang printf("\nNilai n1 dan n2 setelah pemanggilan fungsi :\nn1: %d dan n2: %d\n", n1, n2); return 0; } void tukarNilai(int n1, int n2) { int tmp; //proses pertukaran nilai tmp = n1; n1 = n2; n2 = tmp; printf("\nNilai n1 dan n2 di dalam fungsi :\nn1: %d dan n2: %d\n", n1, n2); } </stdio.h>Pada contoh kode program di atas, penulis mendeklarasikan fungsi dengan tipe data void dengan tujuan untuk agar kita semakin memahami mendeklarasikan fungsi pada bahasa c. Gak ngaruh kali ya? :D Penjelasannya ada pada postingan sebelumnya mengenai "Berkenalan dengan fungsi pada bahasa c", link post nya bisa dilihat di awal postingan ini ya. :) Kode program yang penulis berikan di atas sudah di uji sebelumnya, dan hasil eksekusi programnya dapat dilihat di bawah ini ya.
Akhir kata, terima kasih atas kunjungannya dan jangan lupa untuk meluangkan waktunya sebentar untuk memberikan komentar atau kritik dan saran untuk membantu penulis meningkatkan kualitas postingan agar kita bisa lebih mudah dalam memahami bahasa C ini. Page 2
12/03/2018 C Pemrograman
Pengertian Pass By Value Pemanggilan dengan nilai (Pass By Value) merupakan cara yang dipakai untuk seluruh fungsi buatan yang telah dibahas pada artikel sebelumnya. Pada pass by value, nilai dari parameter aktual akan disalin ke parameter formal. Dengan cara ini nilai parameter aktual tidak bisa dirubah sekalipun nilai parameter formal berubah. Untuk pengertian parameter aktual dan parameter formal bisa Anda lihat di artikel sebelumnya Fungsi Pada Pemrograman Bahasa C.Untuk lebih jelasnya lihat pada fungsi tukar() pada contoh berikut ini. #include <stdio.h> //inisialisasi fungsi tukar void tukar (int, int); //fungsi main main(){ int a = 88, b = 77; printf("Nilai sebelum pemanggilan fungsi\n"); printf("a = %d b = %d\n", a, b); tukar(a,b); printf("\nNilai setelah pemanggilan fungsi\n"); printf("a = %d b = %d\n", a, b); } //fungsi tukar void tukar(int x, int y) { int z; z = x; x = y; y = z; printf("\nNilai di akhir fungsi tukar()\n"); printf("x = %d y = %d\n", x, y); } Tampak bahwa sekeluarnya dari pemanggilan fungsi tukar(), variabel a dan b (yang dilewatkan ke fungsi tukar() tidak berubah, walaupun pada fungsi tukar() telah terjadi penukaran antara parameter x dan y . Mengapa hal ini bisa terjadi ? Sebab x hanyalah salinan dari a dan y adalah salinan dari b (Lihat gambar di bawah ini). Pada saat pemanggilan fungsi, maka : - x bernilai 88 (nilai a) - y bernilai 77 (nilai b) Sesudah pernyataan-pernyataan berikut dijalankan, maka : z = x; x = y; y = z; x akan bernilai 77 dan y bernilai 88.
Pass By Reference Pemanggilan dengan referensi (Pass By Reference) merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. Cara ini dapat dipakai untuk mengubah isi suatu variabel di luar fungsi dengan pelaksanaan pengubahan dilakukan di dalam fungsi./* File program : tukar2.c Untuk melihat pengaruh pemanggilan nilai pada fungsi untuk penukaran dua data */ #include <stdio.h> void tukar (int *px, int *py); //prototype fungsi main() { int a= 88,b = 77; printf("Nilai sebelum pemanggilan fungsi\n"); printf("a = %d b = %d\n", a, b); tukar(&a, &b); //alamat a dan alamat b printf("\nNilai setelah pemanggilan fungsi\n"); printf("a = %d b = %d\n", a, b); } void tukar(int *px, int *py) { int z; z = *px; *px = *py; *py = z; printf("\nNilai di akhir fungsi tukar()\n"); printf("x = %d y = %d\n", *px, *py); } Sebagai contoh perhatikan program tukar2.c yang merupakan modifikasi dari tukar1.c. Perubahan yang pertama terletak dalam definisi fungsi, yang kini berupa : void tukar(int *px, int *py) { int z; z = *px; *px = *py; *py = z; printf("\nNilai di akhir fungsi tukar()\n"); printf("x = %d y = %d\n", *px, *py); } Adapun perubahan dalam parameter aktualnya menjadi :tukar(&a,&b); //alamat a dan alamat b Dalam deklarasi parameter int *px, int *py menyatakan bahwa px dan py adalah suatu variabel pointer. Yang dimaksudkan sebagai variabel pointer adalah suatu variabel yang menunjuk ke variabel lain. Lebih jelasnya, variabel pointer berisi alamat dari variabel lain. Adapun pada pemanggilan fungsi, &a dan &b masing-masing berarti "alamat a" dan "alamat b". Dengan pemanggilan seperti ini, hubungan antara variabel pointer px dan py dengan variabel a dan b adalah seperti ditunjukkan pada gambar di bawah ini Dalam hal ini, px dikatakan menunjuk variabel a dan py menunjuk variabel b.
z = *px; /* 1 */ *px = *py; /* 2 */ *py = z; /* 3 */ Pertama variabel z diisi dengan nilai yang ditunjuk oleh px. Kedua, yang ditunjuk oleh px diisi dengan yang ditunjuk oleh py (berarti a diisi dengan b). Ketiga, yang ditunjuk oleh py diberi nilai z. Dengan melalui tiga pernyataan di atas, nilai a dan b dapat diubah di dalam fungsi.Demikian artikel tentang Pass By Value Dan Pass By Reference Pada Bahasa C. Semoga bermanfaat :) |