Struct
Sederhananya, Struct adalah Class pada bahasa pemrograman lain.
Struct adalah sebuah blueprint objek.
Kita sudah membahas Map sebelumnya. Nah hasil akhir dari sebuah Struct sama dengan hasil akhir Map. Perbedaannya,
- Dalam map kita hanya mendefinisikan tipe data property dan nilai di awal yang bertipe data sama, dan bebas menambahkan property-nya.
- Pada Struct kita mendefinisikan semuanya, apa saja property-nya, tipe data-nya, dan hanya bisa mengubah nilai nya. Namun kita dapat memasukkan tipe data yang berbeda ke dalam-nya.
Seperti disebut sebelumnya, bahwa struct adalah blueprint sebuah object. Yang nanti juga dapat kita gunakan sebagai dokumen kontrak sebuah data yang dikirim/diterima.
1. Deklarasi
Deklarasinya cukup menggunakan keyword struct
// 1.1
type siswa struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}
type siswa struct {nama string; umur uint; kelas uint}
// 1.2
var siswa struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}
var siswa struct {nama string; umur uint; kelas uint}
// 1.3
type siswa = struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}
type siswa = struct {nama string; umur uint; kelas uint}
Ada 3 cara deklarasi dari contoh di atas
- Deklarasi standard. Kemudian kita dapat menggunakan struct ini berkali-kali layaknya blueprint untuk mencetak variabel objek dengan format yang sama.
- Pada contoh ke-2 dan ke-3. Kita menggunakan anonymous struct. Pada contoh ke-2 ini kita menggunakan anonymous struct, kemudian kita deklrasikan ke dalam sebuah variabel. Kita membuat blueprint dan langsung kita pake cetak. Yang berarti bersifat sekali pakai.
- Kita membuat alias dari sebuah anonymous struct. Yang berarti kita dapat menggunakannya berkali-kali layaknnya blueprint seperti contoh 1.
Anyway, kita dapat men-deklarasi-nya dengan cara horizontal seperti contoh di atas, dengan menambahkan ;
di antara property yang ada.
Anonymous Struct
Sepertihalnya anonymous function, anonymous struct adalah struct tanpa nama, biasa sekali pakai.
struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}
Contoh implementasi-nya banyak sekali, akan kita contohkan sambil jalan.
2. Inisialisasi
// 2.1.A
var siswa1A siswa
siswa1A.nama = "Abdul"
Println(siswa1A.nama, siswa1A.umur)
// Abdul 0
// 2.1.B
var siswa1B siswaB
siswa1B.nama = "Achmad"
Println(siswa1B.nama, siswa1B.umur)
// Achmad 0
Pada contoh di atas dapat dilihat bahwa
- Property yang belum diisi nilai-nya, memiliki nilai default sesuai tipe data-nya.
- Penggunaan deklarasi 1.1 dan 1.2 (alias) bersifat sama.
// 2.2.A
var siswa2A = siswa{"Habib", 6, 1, "Anu", "Ani"}
// 2.2.B
var siswa2B = siswa{
"Habib",
6,
1,
"Anu",
"Ani",
}
// 2.2.C
siswa2C := siswa{umur: 6, nama: "Budi"}
// 2.2.C
siswa2D := siswaB{
kelas: 1,
nama: "Eko",
}
Println(siswa2A, siswa2B, siswa2C, siswa2D)
// {Habib 6 1 Anu Ani} {Habib 6 1 Anu Ani} {Budi 6 0 } {Eko 0 1 }
Di atas merupakan pencetakan variabel dari struct diikuti dengan inisialisasi langsung. Meliputi
- 2.2.A => Kita mencetak struct dengan memasukkan nilai ke dalamnnya tanpa nama property, ini akan masuk sesuai urutan property struct, dan bersifat wajib memasukkan semua property yang dibutuhkan. Pada contoh ini kita menuliskannya secara horizontal.
- 2.2.B => Sepertihalnya contoh 2.2.A, hanya saja kita menuliskannya secara vertical.
- 2.2.C => Pada contoh ini kita mencetak struck dan memasukkan nilai, sesuai dengan nama property dengan cara menulisakan nama property-nya, dengan metode ini, kita dapat menuliskannya secara tidak berurutan, dan tidak wajib menulis semua property. Pada contoh ini juga kita menuliskannya secara horizontal.
- 2.2.D => Sepertihalnya contoh 2.2.C, hanya saja kita menulis secara vertical
// 2.3.A
var siswa3A = siswa{}
siswa3A.kelas = 1
Println(siswa3A)
// { 0 1 }
// 2.3.B
var siswa3B = struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}{}
siswa3B.nama = "Rizki"
Println(siswa3B)
// {Rizki 0 0 }
// 2.3.C
var siswa3C = struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}{
"Habib",
6,
1,
"Anu",
"Ani",
}
Println(siswa3C)
// {Habib 6 1 Anu Ani}
// 2.3.D
var siswa3D = struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}{
nama: "Hanif",
kelas: 1,
}
Println(siswa3D)
// {Hanif 0 1 }
// 2.3.E
var siswa3E struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}
siswa3E.nama = "Fajar"
Println(siswa3E)
// {Fajar 0 0 }
Pada contoh kali ini, kita mengkombinasikan semua yang telah kita pelajari di atas, dari mulai vertical, horizontal, anonymous, dengan nama property, atau tanpa nama property, temen-temen juga dapat mencoba sendiri kombinasi yang lain. Tak apa untuk mendapat error, bahkan dari sana kita belajar.
Btw, kita tidak dapat langsung inisialisasi property pada contoh 2.3.E, akan menghasilkan error
var siswa3F struct {
nama string
umur uint
kelas uint
waliMurid string
waliKelas string
}{
nama: "Fajar",
}
Println(siswa3F)
akan menghasilkan
syntax error: unexpected { at end of statement
syntax error: non-declaration statement outside function body
Demikian artikel kali ini, Semoga mudah dipahami, Terima kasih.