Tipe Data Slice
Slice merupakan sebuah tipe data yang agak rumit. Tipe data slice jarang ditemui dalam bahasa pemrograman lainnya. Slice merupakan potongan dari data array. Slice sendiri sangat mirip dengan tipe data array, namun tidak seperti array yang panjangnya tidak dapat berubah, panjang data slice dapat berubah. Slice adalah data yang mengakses sebagian atau seluruh data array. Oleh karena itu, data slice selalu terhubung dengan data array.
Karena data slice terhubung dengan array, maka kamu harus berhati-hati ketika ingin melakukan perubahan. Perubahan yang kamu lakukan pada array akan merubah data pada slice yang terhubung dengannya. Perubahan data pada slice akan merubah data array dan slice lain yang terhubung dengan array.
Slice memiliki tiga buah data yaitu pointer (sebuah penunjuk data pertama pada array), length (panjang data slice, tidak boleh lebih dari capacity), dan capacity (kapasitas dari slice).
Membuat Slice
Ada beberapa cara yang bisa kita gunakan untuk membuat data slice. Perhatikan tabel berikut ini:
Cara | Keterangan |
---|---|
array[low:high] | Membuat slice dimulai dari index low hingga sebelum index high |
array[low:] | Membuat slice dimulai dari index low hingga index terakhir dari array |
array[:high] | Membuat slice dimulai dari index 0 hingga index high |
array[:] | Membuat slice dimulai dari index 0 hingga index terakhir dari array |
Fungsi Pada Slice
Ada beberapa fungsi yang dapat digunakan untuk memanipulasi slice antara lain sebagai berikut:
Fungsi | Keterangan |
---|---|
len(slice) | Mendapatkan panjang slice |
cap(slice) | Mendapatkan kapasitas slice |
append(slice, data) | Membuat slice baru dengan menambah data ke posisi terakhir slice. Jika kapasitas penuh, maka akan otomatis membuat array baru |
make([]TypeData, length, capacity) | Membuat slice baru |
copy(destination, source) | Menyalin slice dari source ke destination |
Ilustrasi Slice
Dari ilustrasi di atas, terdapat array yang berisi nama buah. Kemudian kita membuat slice dengan array[2:5]
yang berarti dimulai dari index 2 hingga sebelum index 5. Maka, data yang ada pada slice adalah Melon, Semangka, dan Jeruk.
Slice yang kita buat memiliki pointer dengan nilai 2 karena dimulai dari index ke 2. Length 3 yaitu jumlah data yang kita dapatkan (index 2, 3, dan 4). Capacity 5 dihitung dari pointer hingga index terakhir array.
Contoh Kode
package main
import "fmt"
func main() {
var fruits = [...]string{
"Apel",
"Nanas",
"Melon",
"Semangka",
"Jeruk",
"Pepaya",
"Anggur",
}
var slice = fruits[2:5]
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
}
output:
[Melon Semangka Jeruk]
3
5
Append
Append adalah cara membuat slice dengan menambah data ke posisi terakhir slice. Jika kapasitas penuh, maka akan otomatis membuat array baru. Sebagai contoh, perhatikan kode berikut ini:
package main
import "fmt"
func main() {
chars := [...]string{"A", "B", "C", "D", "E", "F"}
charSlice1 := chars[4:]
fmt.Println(chars) // [A B C D E F]
fmt.Println(charSlice1) //[E F]
charSlice2 := append(charSlice1, "G")
charSlice2[0] = "E lagi"
fmt.Println(charSlice2) // [E lagi F G]
fmt.Println(chars) // [A B C D E F]
}
output:
[A B C D E F]
[E F]
[E lagi F G]
[A B C D E F]
Variabel charSlice1 memiliki kapasitas 2 dan sudah penuh, sehingga ketika kita melakukan append dan menambahkan huruf G maka akan dibuat array baru. Hal ini bisa dibuktikan dengan mencoba merubah data pada charSlice2, setelah dilakukan Println variabel chars tidak berubah. Berarti referensi charSlice2 bukan lagi array chars yang lama melainkan array yang baru dibuat karena kapasitas charSlice1 sudah penuh.
Make
Fungsi make digunakan untuk membuat slice dari awal tanpa menggunakan array yang sudah ada sebelumnya. Sebagai contoh, perhatikan kode berikut ini:
package main
import "fmt"
func main() {
days := make([]string, 2, 6)
days[0] = "Senin"
days[1] = "Selasa"
fmt.Println(days)
fmt.Println(len(days))
fmt.Println(cap(days))
}
output:
[Senin Selasa]
2
6
Copy
Fungsi copy digunakan untuk membuat salinan dari slice yang sudah ada. Sebagai contoh, perhatikan kode berikut ini:
package main
import "fmt"
func main() {
days := make([]string, 2, 6)
days[0] = "Senin"
days[1] = "Selasa"
fmt.Println(days)
copyDays := make([]string, len(days), cap(days))
copy(days, copyDays)
fmt.Println(copyDays)
}
output:
[Senin Selasa]
[Senin Selasa]
Untuk melakukan copy pastikan ukuran slice destination sama agar data tidak terpotong.
Berikutnya: #15 Tipe Data Map - Belajar Golang Dari Dasar