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, Tetapi Kagak seperti array yang panjangnya Kagak 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 Engkau harus berhati-hati ketika Ingin melakukan perubahan. Perubahan yang Engkau 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 Mempunyai tiga buah data Merukapan pointer (sebuah penunjuk data pertama pada array), length (panjang data slice, Kagak boleh lebih dari capacity), dan capacity (kapasitas dari slice).
Membangun Slice
Terdapat beberapa Metode yang Dapat kita gunakan Kepada Membangun data slice. Perhatikan tabel berikut ini:
Metode | Keterangan |
---|---|
array[low:high] | Membangun slice dimulai dari index low hingga sebelum index high |
array[low:] | Membangun slice dimulai dari index low hingga index terakhir dari array |
array[:high] | Membangun slice dimulai dari index 0 hingga index high |
array[:] | Membangun slice dimulai dari index 0 hingga index terakhir dari array |
Fungsi Pada Slice
Terdapat beberapa fungsi yang dapat digunakan Kepada memanipulasi slice antara lain sebagai berikut:
Fungsi | Keterangan |
---|---|
len(slice) | Mendapatkan panjang slice |
cap(slice) | Mendapatkan kapasitas slice |
append(slice, data) | Membangun slice baru dengan menambah data ke posisi terakhir slice. Kalau kapasitas penuh, maka akan Mekanis Membangun array baru |
make([]TypeData, length, capacity) | Membangun 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 Membangun slice dengan array[2:5]
yang berarti dimulai dari index 2 hingga sebelum index 5. Maka, data yang Terdapat pada slice adalah Melon, Semangka, dan Jeruk.
Slice yang kita buat Mempunyai pointer dengan nilai 2 karena dimulai dari index ke 2. Length 3 Merukapan jumlah data yang kita dapatkan (index 2, 3, dan 4). Capacity 5 dihitung dari pointer hingga index terakhir array.
Teladan 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 Metode Membangun slice dengan menambah data ke posisi terakhir slice. Kalau kapasitas penuh, maka akan Mekanis Membangun array baru. Sebagai Teladan, 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 Kembali"
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 Kembali F G]
[A B C D E F]
Variabel charSlice1 Mempunyai kapasitas 2 dan sudah penuh, sehingga ketika kita melakukan append dan menambahkan huruf G maka akan dibuat array baru. Hal ini Dapat dibuktikan dengan mencoba merubah data pada charSlice2, setelah dilakukan Println variabel chars Kagak berubah. Berarti Surat keterangan charSlice2 bukan Kembali array chars yang lelet melainkan array yang baru dibuat karena kapasitas charSlice1 sudah penuh.
Make
Fungsi make digunakan Kepada Membangun slice dari awal tanpa menggunakan array yang sudah Terdapat sebelumnya. Sebagai Teladan, 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:
Copy
Fungsi copy digunakan Kepada Membangun salinan dari slice yang sudah Terdapat. Sebagai Teladan, 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]
Kepada melakukan copy pastikan ukuran slice destination sama agar data Kagak terpotong.
Berikutnya: #15 Tipe Data Map – Belajar Golang Dari Dasar