Photo by amanda panda on Unsplash
Komputer menyimpan nilai dengan alamat berikut: (0x0123456789abcdef), ini disebut dengan alamat mesin pada memori utama. Batas alamat mesin ini bergantung pada main memory utama kita yaitu RAM (Random Access Memory), Misal kamu punya RAM 4GB kamu mempunyai ruang untuk penempatan alamat sebanyak itu dengan asumsi telah dipotong keberadaan sistem operasi.
Namun ini cukup merepotkan kala kita harus memanggil dengan alamat seperti itu, terlebih alamat itu berubah-ubah. Kenapa alamat tersebut berubah-ubah karena setiap program memiliki ukuran data yang berbeda yang mana berpengaruh pada posisi alamat baik dirinya maupun program lain.
Maka dari itu untuk menyembunyikan kesulitan ini dibuatlah konsep penyimpan data mengunakan nama yang kita beri sendiri yaitu Variable, yang akan kita bahas pada tulisan ini.
Perlu diketahui untuk menjalankan paket go yang di-kompile kita perlu mendefinisikan entry point (fungsi main).
package main
func main(){
// tulis kode kita disini
}
dan jalankan dengan perintah go run [nama skrip].go
.
Untuk membuat skrip menjadi biner (ELF
/.exe
) dengan perintah go build [nama skrip].go
, maka akan menghasilkan berkas biner yang sama dengan nama skrip.
Pada program variable perlu 3 komponen yang perlu diketahui: Nama, Tipe data, dan Nilai pada variable. Tipe data berguna untuk memastikan jenis nilai apa yang disimpan karena setiap tipe data memiliki cara penyimpanan yang berbeda dan pengoperasianya. Nama pada variable agar kita mudah untuk mengambil dan memakai nilainya.
Untuk mendefinisikan suatu variable (membuat variable) kita perlu mengikut aturan berikut:
var [nama] [tipe data] = [nilai]
contohnya seperti berikut:
var nama string = "Elisabeth Watson"
Tipe data string berarti kita menyimpan data tersebut dalam bentuk karakter, variasi tipe data akan kita bahas pada bagian berikutnya.
Go memiliki cara untuk menebak tipe data variable dari suatu nilai saat pertama kali diberikan dengan aturan definisi berikut:
nama := "Elisabeth Watson"
Operator :=
ini disebut sebagai walrus. Cara ini dipakai bila variable bersifat lokal agar tidak membingungan dipanggil dari lingkup lain.
Berikut contoh penerapan dalam program agar nanti dapat di ikuti untuk mencoba contoh lain:
package main
// import kata kunci untuk mengunakan pustaka
import "fmt"
func main(){
// tulis kode kita disini
var nama string = "Elisabeth Watson"
fmt.Println(nama)
// maka akan menampilkan : Elisabeth Watson
}
Pustaka fmt
merupakan pustaka bawaan untuk menampilkan nilai kelayar.
Variable kosong ada definisi variable tanpa memberikan nilai saat definisi, nilai dapat diberikan setelah baris berikutnya dengan mengunakan operasi pemberian nilai (=
).
var [nama] [tipe data]
[nama] = [nilai]
Berikut contohnya:
var nama string
nama = "Ninomae Gura"
Here a catch ketika variable kosong ini kalo tidak kita isi lalu dipakai programnya bisa runtime-error (error saat dijalankan).
Tipe data merupakan jenis data yang akan disimpan pada variable, setiap jenis data memeliki cara penyimpanan yang berbeda pada memori.
Kita akan membahas tipe data dasar berdasarkan katagorinya:
uint
,int
,float
Kategori ini berisi nilai angka yang akan diproses dengan operasi seperti aritmatika dan perbandingan. Tipe data yang termasuk kategori ini: int
(Bilangan bulat), uint
(Bilang bulat positif) dan float
(Bilangan desimal).
var angkaLima int = 5
var desimal float32 = 32.0303
float32
menandakan bilangan koma dengan keakurat pecahan sebesar 32-bit (2 pangkat 32).
Ini salah satu fitur pada data numerik, kita bisa memberikan ukuran untuk menampung batas nilai (ukuran bit) untuk menghemat ruang memori. Sebagai contoh kita hanya perlu menampung nilai 0 - 100 pada suatu kasus, sebaiknya kita mengunakan uint8
ketimbang int16
atau int8
.
Untuk mengetahui batasanya bit, ambil ukuran bit lalu pangkatkan dengan 2 (kasus ini 8 maka hasilnya 256) dibanding mengambil 16-bit (2^16). Kenapa kita mengambil uint8 ? karena 8-bit lebih kecil jangkauanya yang mana akan hemat memori dan uint
karena kita tidak bermain dengan nilai negatif.
Kenapa dipangkat dengan dua ? karena komputer menyimpan nilai dalam format biner yang mana hanya ada dua kemungkinan : 0 dan 1.
Pada tipe uint
dan int
memiliki batasan bit : 8
,16
,32
(bisa ditulis int saja untuk bit ini),64
dan float
: 32
dan 64
.
string
Kategori menampung nilai sebagai karakter baik angka, huruf maupun. Tipe data kategori ini: string
.
var minuman = "Ame Milk"
bool
Kategori ini menampung nilai logik yaitu hanya benar (true) dan salah (false), Tipe data kategori ini : bool
.
var benar bool
benar = true
Variable/Nilai juga bisa dibuang karena pada Go boleh ada variable/nilai menganggur (tidak digunakan), maka untuk itu bisa dibuang.
Membuang variable cukup sederhana dengan mengubah namanya menjadi _
(underscore)
var nama,_ := "Namku El", "Aku adalah ayam"
// pada kasus ini nilai "Aku adalah ayam" dibuang
Pointer merupakah cara kita untuk mengakses alamat mesin dari variable, variable pointer dideklarasikan dengan simbol bintang sebelum tipe data: *string
, *int
.
Mengunakan Pointer dapat menghemat memori karena; kita mengunakan alamat yang sama dengan nilai variable yang inginkan, jadi kita tidak menyalin nilai yang sebelumnya sudah ada dan dapat diubah dari fungsi lain. Ini disebut dengan tautan.
Untuk mengunakan pointer kita perlu nilai yang sudah memiliki alamat/telah didefinisikan, untuk
mengambil alamat dari nilai kita mengunakan operator ampersand (&
) dan untuk mengambil nilai serta
mengubahnya mengunakan bintang (*
).
Contoh seperti berikut:
var nama string = "Elisabeth Kartini"
var alamat *string = &s
fmt.Println(nama) // Elisabeth Kartini
fmt.Println(alamat) // 0xabcdef
// contoh mengambil alamat
fmt.Println(&nama) // 0xabcdef
// contoh mengambil nilai
fmt.Println(*alamat) // Elisabeth Kartini
Bisa kita teliti variable nama dan alamat memiliki nilai alamat yang sama bearti nilai yang disimpan pun sama, bedanya bila kita merubah nilai pada variable pointer (variable alamat) maka variable biasa (variable nama) akan ikut berubah.
var nama string = "Elisabeth Kartini"
var alamat *string = &s
fmt.Println(nama) //Elisabeth Kartini
*alamat = "Elisabeth"
fmt.Println(nama) // Elisabeth
Pada variable pointer kita bisa menyimpan nilai nil
yang berarti kosong, untuk nantinya ditaukan
dengan memori tertentu.
Dapat disimpulkan variable menjadi cara kita untuk memudahkan menyimpan data pada memori, sekaligus cara mengaksesnya berdasarkan jenis datanya.
Sekian dari tulisan ini, bila ada kekurangan saya mohon maaf.
Terima Kasih sudah membaca.
Adverse Prelude
Functional & System Programming Enthusiats