Golang Bagian 8
Data Type Conversion
Okaaayyyy lanjut lagi dengan blog Golang Bagian 8. Kali ini kita akan ngoprek bareng-bareng tentang Data Type Conversion. Apa itu Data Type Conversion ? Data Type Conversion atau dalam bahasa indonesia konversi antar tipe data, misal :
- Konversi dari tipe data Integer menjadi tipe data String.
- Konversi dari tipe data String menjadi tipe data Integer.
- Konversi dari tipe data Integer menjadi tipe data Floating Point.
- Konversi dari tipe data Floating Point menjadi tipe data Integer.
- Dan banyak konversi lain dari tipe data satu ke tipe data lainnya.
kalau teman-teman pernah ngoding betapa sering kita melakukan konversi tipe data contoh :
- Pada sebuah halaman web ada aplikasi kalkulator seperti gambar 1 dibawah. Input box 0 itu tipe datanya adalah String, supaya bisa dihitung harus dikonversi ke tipe data Numerik (Integer/Floating Point).
- Misal kita punya aplikasi Golang seperti contoh program 1 dibawah, bisa dicoba disini.
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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program go.
- Baris 9 deklarasi variabel x tipe data Integer dengan nilai 5.
- Baris 10 deklarasi variabel y tipe data Integer dengan nilai 2.
- Baris 11 print output 5/ 2 yang hasilnya adalah 2, padahal yang kita inginkan adalah 2.5, kita harus melakukan konversi tipe data di Golang.
Output :
5 / 2 = 2
Dan masih super banyak lagi kasus penggunaan konversi tipe data. Sebelum kita bahas lebih detail tentang konversi tipe data di Golang, akan menyenangkan kayanya kalau kita bahas sedikit tipe-tipe bahasa pemograman yang menyangkut tipe data.
Golang adalah bahasa pemograman dimana tipe data nya statis dan strong atau bahasa bulenya Statically Typed Language dan Strong Typed.
Bahasa pemograman dapat dikategorikan menjadi empat kategori sebagai berikut :
- Statically Typed jika compiler melakukan checking tipe data variabel pada waktu kompilasi. Contoh : Golang,Java, C#, dan lain lain. Cirinya adalah jika dalam bahasa pemograman tersebut ada cara untuk deklarasi variabel dengan tipe data nya. Contoh pada Golang sebagai berikut
var a int8
a = 10
Contoh pada C# sebagai berikut :
int a;
a = 10;
2. Dinamically Typed jika proses checking tipe data variable pada waktu eksekusi program. Contoh JavaScript, PHP, dan lain-lain. Contoh pada JavaScript sebagai berikut :
var a=10;
Contoh pada PHP sebagai berikut :
<?php
$a = 6;
?>
3. Campuran Statically Typed dan Dynamically Typed atau Banci Typed seperti Objective-C. Contoh sebagai berikut :
int a;
kalau diliat cara deklarasi nya harus mencantumkan tipe data nya, tetapi menurut dokumentasi dari apple sebagai berikut :
A variable is dynamically typed when the type of the object it points to is not checked at compile time. Objective-C uses the
id
data type to represent a variable that is an object without specifying what sort of object it is. This is referred to as dynamic typing.
contohnya sebagai berikut :
NSArray *anArray = [NSArray arrayWithObjects:@"A string", [NSDecimalNumber zero], [NSDate date], nil];NSInteger index;for (index = 0; index < 3; index++) {id anObject = [anArray objectAtIndex:index];NSLog(@"Object at index %d is %@", index, [anObject description]);}
Sumpah gue ngak suka syntax Objective-C WTF!
variabel *anArray adalah array (kalau teman-teman tidak tahu array itu apa, array adalah kumpulan data yang sejenis tipe datanya, bisa juga sih tipe datanya beda-beda dibeberapa bahasa pemograman seperti Objective-C) yang diinisialisasi dengan tipe data-data berbeda-beda. Pada baris ini
NSLog(@"Object at index %d is %@", index, [anObject description]);
pada saat compile tidak diketahui tipe datanya. Jadi menurut gua sih ini . Netizen coder juga terbagi menjadi dua kubu ada yang bilang Objective-c Statically Typed ada yang bilang Dynamically Typed.
4. Strong Typed Language adalah bahasa pemograman yang mempunyai aturan yang strict terhadap tipe data misal Golang bisa di coba 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 Deklarasi variabel a dengan tipe data Integer dengan nilai 10.
- Baris 11 Deklarasi variabel b dengan tipe data String dengan nilai “Ten”.
- Baris 13 fmt.Println(“a + b = “, a + b) print hasil a + b dimana di-Golang akan ada compilation error, karena ada perbedaan tipe data a dan b.Hal ini terjadi karena Golang Strongly Typed Language.
Output :
./prog.go:13:28: invalid operation: a + b (mismatched types int and string)
5. Weak Typed Language adalah bahasa pemograman yang mempunyai aturan yang tidak terlalu strict terhadap tipe data misal pada bahas pemograman Java Script, contoh sebagai berikut :
var x = 5;
var y = “6”;
var z = x + y;alert(z)
itu hasil alert(z) adalah “56” , jadi Weak Typed mah bebas!!!!, tetapi jangan salah karena terlalu bebas kadang suka ada bug yang sukar untuk di-debug.
Jadi menurut saya kategori tipe data ini spektrum tidak ada batasan yang clear atau mati bisa kita gambarkan dengan diagram berikut :
Cara membacanya seperti ini misal C# itu strong tapi tidak terlalu Static, kalau Golang pasti kanan atas banget bo!!!.
Kita balik lagi ke Golang, karena Golang Statically dan Strong Typed maka memerlukan konversi tipe data setiap ada kasus konversi data. Berikut adalah beberapa kasus konversi tipe data di Golang
- Konversi dari int8 menjadi int32.
Contoh bisa dicoba disini
Penjelasan program 3
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int8 dengan nilai 15.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int32.
- Baris 13 mengisi variabel bigIndex dari hasil konversi variabel index menjadi tipe data int32 dengan fungsi int32().
- Baris 15 print ouput variabel bigIndex.
Output :
15
2. Konversi int32 menjadi int8.
Contoh bisa dicoba disini
Penjelasan program 4
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int8.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int32 dengan nilai 64.
- Baris 13 mengisi variabel index dari hasil konversi variabel bigIndex menjadi tipe data int8 dengan fungsi int8().
- Baris 15 print variable index.
Output :
64
Teman-teman harus hati-hati dengan fungsi int8() karena range datanya kecil dari -128 sampai 127. Contohnya pada program 5 berikut, bisa dicoba disini.
Penjelasan program 5
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int8.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int32 dengan nilai 129.
- Baris 13 mengisi variabel index dari hasil konversi variabel bigIndex menjadi tipe data int8 dengan fungsi int8().
- Baris 15 print variable index.
Output :
-127
Output diatas terjadi karena maximal nilai positif int8 adalah 127, maka jika lebih dari itu akan berputar 2 (129–127) langkah menjadi negatif -127 atau -128 terus -127.
-128,-127...0….. 126, 127(maximal), -128, -127
jadi setelah 127 bukan 128 tetapi -128 terus -127, karena maximal dari int8 adalah 127.
3. Konversi tipe int8 menjadi int64
Contoh bisa dicoba disini
Penjelasan program 6
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int8 dengan nilai 15.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int64.
- Baris 13 mengisi variabel bigIndex dari hasil konversi variabel index menjadi tipe data int64 dengan fungsi int64().
- Baris 15 print variable bigIndex.
Output :
15
4. Konversi tipe int64 menjadi int8.
Contoh bisa dicoba disini
Penjelasan program 7
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int8.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int64 dengan nilai 64.
- Baris 13 mengisi variabel index dari hasil konversi variabel bigIndex menjadi tipe data int8 dengan fungsi int8().
- Baris 15 print variable index.
Output :
64
Teman-teman harus hati-hati juga kalau konversi dari int64 menjadi int32 seperti poin 2.
5. Konversi tipe int32 menjadi int64
Contoh bisa dicoba disini
Penjelasan program 8
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int32 dengan nilai 1000000.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int64.
- Baris 13 mengisi variabel bigIndex dari hasil konversi variabel index menjadi tipe data int64 dengan fungsi int64().
- Baris 15 print variabel bigIndex.
Output :
1000000
6. Konversi tipe int64 menjadi int32
Contoh bisa dicoba disini
Penjelasan program 9
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int32.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int64 dengan nilai 1000000.
- Baris 13 mengisi variabel index dari hasil konversi variabel bigIndex menjadi tipe data int64 dengan fungsi int32().
- Baris 15 print variabel index.
Output :
1000000
Teman-teman harus hati-hati juga mengunakan funsi int32() dengan input parameternya lebih besar dari nilai maximum int32 (dijelaskan di- Golang bagian 3) yaitu ²³¹-1 = 2147483648, contoh bisa dicoba disini
Penjelasan program 10
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel index dengan tipe data int32.
- Baris 11 deklarasi variabel bigIndex dengan tipe data int64 dengan nilai 2147483649.
- Baris 13 mengisi variabel index dari hasil konversi variabel bigIndex menjadi tipe data int64 dengan fungsi int32().
- Baris 15 print variabel index.
Output :
-2147483647
Outputnya tidak sesuai harapan kita soalnya nilai 2147483649 melebihi nilai maximum int32 yaitu 2147483647, jadi kalau dinyatakan dengan deret angka akan seperti ini range int32
-2147483648,-2147483647,,,,,,,0,,,,,,,,,2147483647,-2147483648,-2147483647
jadi setelah 2147483647 akan menjadi -2147483648 terus -2147483647, bukan 2147483648 karena maximum int32 adalah 2147483647.
7. Konversi tipe Integer menjadi Floating Point
Fungsi yang digunakan untuk konversi Integer menjadi Floating Point mirip dengan konversi antar Integer untuk kasus nomor 7 bisa dicoba disini.
Penjelasan program 11
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel a dengan tipe data int32 dengan nilai 64.
- Baris 11 deklarasi variabel b dengan tipe data float32.
- Baris 13 mengisi variabel b dari hasil konversi variabel a menjadi tipe data float64 dengan fungsi float32().
- Baris 15 print variabel b. %.2f digunakan untuk format menjadi String Float dua digit dibelakang koma.
Output :
64.00
8. Konversi tipe Floating Point menjadi Integer
Contoh bisa dicoba disini
Penjelasan program 12
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel a dengan tipe data int32.
- Baris 11 deklarasi variabel b dengan tipe data float32 dengan nilai 64.9.
- Baris 13 mengisi variabel a dari hasil konversi variabel menjadi tipe data int32 dengan fungsi int32().
- Baris 15 print variabel a. %d digunakan untuk format menjadi String Integer yang hasilnya 64 si Golang membantai koma nya. 64.9 tidak menjadi 65 walaupun lebih mendekati 65 jadi pada konversi ini tidak ada pembulatan.
Output :
64
Balik lagi keprogram 1 diatas tentang pembagian kita akan modifikasi programnya seperti ini
Penjelasan program 13:
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel x tipe data Integer dengan nilai 5.
- Baris 10 deklarasi variabel y tipe data Integer dengan nilai 2.
- Baris 11 print output x/ y yang hasilnya adalah 2.5 sesuai dengan yang kita inginkan karena kita convert x dan y menjadi Floating Point.
Output :
x / y = 2.5
Saya akan bahas dikit tentang kode dibawah
fmt.Println(“x / y = “,float32(x)/float32(y))
kenapa harus dikonversi dua-duanya, kenapa tidak seperti ini
fmt.Println(“x / y = “,float32(x)/y)
karena Golang bahasa pemograman yang Strong Typed maka pembagian antara Float (float32(x)) dan Integer (y) tidak akan diperbolehkan, kecuali seperti kode dibawah.
fmt.Println(“x / y = “,float32(x)/2)
Karena 2 itu sebenarnya Float dalam kasus kode diatas.
9. Konversi tipe String menjadi Integer.
Kita coba langsung aja disini
Penjelasan program 14:
- 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 yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 9 deklarasi variabel x tipe data String dengan nilai “5”.
- Baris 11 deklarasi variabel y tipe data Integer dengan nilai 2.
- Baris 13 print output x + y akan compile error seperti output dibawah.
Output :
./prog.go:13:27: invalid operation: x + y (mismatched types string and int)
Sekali lagi tidak ada keajaiban otomatis x dikonversi jadi Integer 5 tidak-tidak sergio!!! di Golang tidak seperti itu karena Strong dan Static Typed .
Kita harus menggunakan fungsi konversi dari String menjadi Integer seperti disini
Penjelasan program 15:
- Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
- Baris 3–7 kita akan menggunakan package fmt didalamnya terdapat fungsi Println yang berfungsi untuk print output ke standard output seperti monitor, package log untuk logging ke monitor, dan package strconv untuk fungsi konversi string.
- Baris 9 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 11 deklarasi variabel x tipe data String dengan nilai “5”.
- Baris 13 konversi String menjadi Integer dengan fungsi Atoi dipackage strconv. Nilai balik dari Atoi ini berupa mutltiple return yaitu integerX untuk hasil konversi “5” dan err kalau terjadi error pada saat konversi, misal x =”5s” akan terjadi err = “strconv.Atoi: parsing “5s”: invalid syntax”
- Baris 15–19 jika err tidak null maka akan logging message err.
- Baris 21 deklarasi variabel y tipe data Integer dengan nilai 2.
- Baris 23 print output x + y .
Ouput :
x + y = 7
10. Konversi tipe String menjadi Float.
Bisa dicoba disini
Penjelasan program 16:
- Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
- Baris 3–7 kita akan menggunakan package fmt didalamnya terdapat fungsi Println yang berfungsi untuk print output ke standard output seperti monitor, package log untuk logging ke monitor, dan package strconv untuk fungsi konversi String.
- Baris 9 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 11 deklarasi variabel x tipe data String dengan nilai “5”.
- Baris 13 konversi String menjadi float32 dengan fungsi ParseFloat dipackage strconv, jika ingin menjadi float64 tinggal ganti parameter kedua fungis ParseFloat menjadi 64. Nilai balik dari ParseFloat ini berupa mutltiple return yaitu floatX untuk hasil konversi “5” dan err kalau terjadi error pada saat konversi, misal x =”5s” akan terjadi err = “strconv.ParseFloat: parsing “5s”: invalid syntax”
- Baris 15–19 jika err tidak null maka akan logging message err.
- Baris 21 deklarasi variabel y tipe data Float dengan nilai 2.0.
- Baris 23 print output x + y .
Ouput :
x + y = 7
12. Konversi tipe Integer menjadi String.
Coba disini
Penjelasan Program 17 :
- Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
- Baris 3–6 kita akan menggunakan package fmt didalamnya terdapat fungsi Println yang berfungsi untuk print output ke standard output seperti monitor, package log untuk logging ke monitor, dan package strconv untuk fungsi konversi String.
- Baris 8 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 10 deklarasi variabel x dengan tipe data Integer dengan nilai 5.
- Baris 12 konversi variabel x menjadi String “5” dimasukan variabel stringX, teman-teman perhatikan nilai balik dari fungsi Itoa cuman satu, soalnya semua karakter bisa dikonversi jadi String jadi tigak mungkin ada error.
- Baris 14 deklarasi variabel y dengan tipe data String dengan nilai “2.0”.
- Baris 16 print x + y yang hasilnya String “52.0” hasil concate x dan y.
Output :
x + y = 52.0
13. Konversi tipe Float menjadi String.
Coba disini
Penjelasan Program 18 :
- Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
- Baris 3–6 kita akan menggunakan package fmt didalamnya terdapat fungsi Println yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 8 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 10 deklarasi variabel x dengan tipe data Float dengan nilai 5.0.
- Baris 12 konversi variabel x menjadi String “5” dimasukan variabel stringX dengan fungsi fmt.Sprint(x). Jadi kalo si fmt.Sprint(x) akan menghilangkan 0 digit terakhir , misal yang lain Float 5.10 maka akan dirubah jadi String “5.1”.
- Baris 14 deklarasi variabel y dengan tipe data String dengan nilai “2.0”.
- Baris 16 print x + y yang hasilnya string “52.0” hasil concate x dan y.
Output :
x + y = 52.0
Fungsi fmt.Sprint(x) bisa dipakai untuk konversi Integer menjadi string, coba disini
Penjelasan Program 19 :
- Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
- Baris 3–6 kita akan menggunakan package fmt didalamnya terdapat fungsi Println yang berfungsi untuk print output ke standard output seperti monitor.
- Baris 8 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
- Baris 10 deklarasi variabel x dengan tipe data Integer dengan nilai 5.
- Baris 12 konversi variabel x menjadi string “5” dimasukan variabel stringX dengan fungsi fmt.Sprint(x).
- Baris 14 deklarasi variabel y dengan tipe data String dengan nilai “2.0”.
- Baris 16 print x + y yang hasilnya string “52.0” hasil concate x dan y.
Output :
x + y = 52.0
Okaayyy konversi data sebenarnya masih banyak di-Golang tapi cukup disini aja dulu yang penting-penting aja. Silahkan baca blog Golang lain nya di sini. weleh panjang juga nih blog mantappppppp!!!.