Golang Pointer dan Cerita 10 Tahun Kemudian

Jadi ingat jaman dulu kuliah, praktikum dasar komputer ada materi pemrograman bahasa C. Salah satu yang dipraktikkan adalah pointer. Waktu itu saya tidak paham hahaha. Beberapa tahun kemudian, kurang lebih 10 tahun di masa depan, akhirnya matang juga pemahaman saya terkait konsep pointer. Namun bedanya sekarang pointer di Golang.

Berbicara soal pointer biasanya sumber belajar akan menyenggol 2 istilah ini :

  • pass by value
  • pass by reference

Pass by value itu kita passing parameter ke function berupa value/nilai. Karena yang di-passing berupa value (bukan reference) maka walaupun di dalam function nilainya diubah, di luar function nilainya masih yang lama. Hal ini terjadi karena parameter yang dilempar di-copy nilainya di dalam function. Jadi variabel yang jadi parameter, ketika di luar dan di dalam adalah 2 barang yang berbeda.

Kita buktikan dengan memanfaatkan pointer di golang. Pointer di golang berisi alamat di mana variabel disimpan. Jika antara 2 benda alamatnya sama, artinya keduanya adalah benda yang sama. Sebaliknya jika beda alamat. Pointer bisa didapatkan dengan menggunakan &, prosesnya namanya referencing

Ketika dijalankan, hasilnya menunjukkan alamat memori yang berbeda.

Karena keduanya barang yang beda, makanya ketika variabel di dalam function diubah, nilai yang di luar masih sama, tidak terpengaruh sama sekali. Simak kode di bawah ini.

Nilai variabel number di luar function prove adalah 5. Ketika di dalam prove dikalikan 2 jadi 10. Tetapi ketika kita coba tengok lagi isi number di luar function, nilainya masih tetap 5. Hasil running program di atas begini

See?

Pass by reference, yang kita lempar ke function adalah reference atau alamat yang ada di memori. Karena alamatnya sama maka ketika variabel di dalam function diubah, yang diluar akan ikut berubah. Mari kita buktikan kalau alamatnya sama terlebih dahulu.

Hasil terbukti sama

Setelah sebelumnya kita tahu bahwa untuk mengambil reference alamat di memori menggunakan & misalnya &number , sekarang ada hal baru yang kita pelajari. Tanda * dipakai untuk mengambil value (bukan reference) dari variabel yang bentuknya reference. Agak membingungkan ya. Saya kasih contoh.

Ketika kita menggunakan &, maka variabel penampung berisi alamat, bukan value/nilai sebenarnya.

Nah untuk mendapatkan nilainya, kita pakai *.

Proses mengambil nilai dari reference menggunakan * disebut dereferencing.

Sekarang balik ke pass by reference. Kita buktikan kalau perubahan di dalam function akan berpengaruh terhadap variabel di luar.

Berikut adalah hasilnya, tidak mengejutkan 😉

Saya harap tulisan ini membantu, kalau ada pertanyaan atau masukan untuk tulisan ini, silakan kita diskusikan di bagian komentar.

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

Leave a Reply

Your email address will not be published. Required fields are marked *