Golang Part 16 YIHAAHHHH

Pointer

Neraka ngoding
Neraka Ngoding
3 min readApr 3, 2020

--

Okayyy hey ho lets go! kita bahas tentang Pointer. Pertama kali dengar Pointer waktu kuliah zaman old! mata kuliah pemograman komputer dengan bahasa pemograman C, ibu dari semua bahasa pemograman , OG untuk high level programming language. So langsung aja.

Pointer apaan tuh?

Pointer ini kata bahasa inggris, artinya penujuk dalam kata bahasa indonesia. Penunjuk? apa yang ditunjuk ? yang ditunjuk adalah memory address komputer suatu variabel. Sebelum membahas lebih lanjut kita refresh dulu gambar diagram di memory computer sebagai berikut.

Gambar 1.

Penjelasan gambar 1 :

  • x adalah variabel dengan lokasi memory 0004.
  • y adalah variabel dengan lokasi memory 1005.
  • isi variabel x adalah alamat memory y yaitu 1005.

Jadi gambar 1 diatas x adalah pointer variabel y.

Pointer tuh tipe data juga

Teman-teman perhatikan isi variabel x gambar 1 diatas isinya lokasi memory variabel lain, kalau tipe data Integer isinya mungkin 1,2, dll jadi bisa disimpulkan pointer tipe data juga.

Contoh program Pointer

Okayyyy sekarang langsung ngoding Pointer cocok banget nih habis blog bagian 15 tentang fungsi, bisa dicoba disini programnya.

Program 1.

Penjelasan program 1:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 sampai 11 deklarasi fungsi rubahNilai dengan satu parameter input dengan tipe data Pointer Integer, dan tanpa output.
  • Baris 9 itu maksudnya simpan nilai 5 di memory variabel a. Baris 9 ini yang dimaksud proses “dereference” dengan mengunakan operator “*”.
  • Baris 12 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 14 deklarasi variabel x dengan tipe data int dengan nilai 10.
  • Baris 15 akses fungsi rubahNilai dengan input &x . Teman-teman perhatikan ada tanda & itu maksudnya alamat memory variabel x. Ini yang dimaksud by reference parameter inputnya.
  • Baris 16 print x yang tentu saja isinya berubah jadi 5.

Output :

5

kalau di-blog bagian 15 tentang fungsi kebanyakan by value input parameternya.

Sekarang kita buat program contoh variasi lain, bisa dicoba disini.

Penjelasan program 2:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 sampai 11 deklarasi fungsi rubahNilai dengan satu parameter input dengan tipe data Pointer Integer, dan tanpa output.
  • Baris 9 itu maksudnya simpan nilai 5 di memory variabel a. Baris 9 ini yang dimaksud proses “dereference” dengan mengunakan operator “*”.
  • Baris 12 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 14 deklarasi variabel x dengan tipe data pointer int atau *int dengan mengunakan new(int), tidak ada nilainya.
  • Baris 15 akses fungsi rubahNilai dengan input x . Teman-teman perhatikan tidak ada tanda & soalnya variabel x sudah Pointer kalau di-program 1 kan variabel int biasa. Ini yang dimaksud by reference parameter inputnya.
  • Baris 16 print x yang tentu saja isinya bukan 5 soalnya x adalah Pointer isi alamat memory yang ditunjuk.
  • Baris 17 print *x atau nilai yang ditunjuk Pointer.

Output :

0x40e020
5

Kenapa harus pakai pointer?

Sekarang kenapa harus pakai Pointer ? atau gunanya buat apa sih pointer? sebelum itu kita bahas dulu input parameter fungsi. Input parameter fungsi itu bisa dua :

  1. By value seperti kebanyakan contoh program -blog bagian 15 tentang fungsi, fungsi tidak merubah variabel aslinya, misal program 1 diatas jika fungsi rubahNilai dirubah menjadi seperti ini.
func rubahNilai(a int) {    a = 5}

terus kita akses fungsinya

x := 10
rubahNilai(x)
fmt.Println(x) // ini tidak akan menjadi 5 tetapi tetap 10

Hal itu terjadi terjadi karena kejadian sebenarnya ketika

rubahNilai(x)

Sebenarnya yang terjadi isi memory variabel x dicopy kelokasi memory yang baru, jadi beda variabel sebenarnya beda lokasi memory.

2. By reference seperti sudah dijelaskan sebelumnya akan merubah nilai variabel aslinya, lah emang yang dikasih ke input parameter fungsi memang lokasi variabel aslinya.

Jadi, salah satu gunanya Pointer adalah untuk by reference input fungsi kan lumayan menghemat memory, bayangkan fungsi dipanggil dimana-mana memory yang digunakan akan semakin banyak apalagi misalkan input parameter fungsi itu adalah tipe data komplek seperti struct akan lebih besar lagi memorynya.

Okayyyy sekian dulu pendek saja tentang pointer. Silahkan baca blog Golang lainnya di sini.

--

--

Neraka ngoding
Neraka Ngoding

Coder terbaik sebatununggal-bandung, west java, indonesia belum terkalahkan selama 15 tahun. “Coder adalah Identitas bukan profesi”