Gunakan tanda [] untuk mencari tag gan! contoh [flutter, javascript]

Golang - Tipe Data Slice

Golang - Tipe Data Slice

Artikel ini dibukukan pada buku Belajar Bahasa Pemrograman Go
access_time 28 Okt 2024 remove_red_eye 310 Kali spellcheck 579 Kata, 4420 Karakter
#go #golang

Dalam dunia pemrograman, tipe data yang fleksibel dan dinamis sangat penting, terutama ketika bekerja dengan kumpulan data yang jumlahnya bervariasi. Pada Golang, slice adalah tipe data yang dirancang untuk kebutuhan tersebut. Slice memberikan cara untuk bekerja dengan array yang mendasarinya namun dengan fleksibilitas yang lebih baik. Mari kita pelajari lebih dalam mengenai slice, anatominya, perbedaannya dengan array, dan praktik terbaiknya.

Apa Itu Slice?

Slice adalah tipe data dinamis di Golang yang memungkinkan kita mengelola kumpulan elemen dengan ukuran yang dapat berubah. Berbeda dengan array yang memiliki panjang tetap, slice dapat bertambah atau berkurang sesuai kebutuhan. Slice berfungsi sebagai lapisan di atas array, memberikan akses ke sebagian atau seluruh array tanpa perlu mendefinisikan ulang.

Anatomi Slice

Slice terdiri dari tiga komponen utama:

  1. Pointer: Menunjukkan alamat dari elemen pertama slice dalam array yang mendasarinya.
  2. Length: Jumlah elemen yang ada dalam slice.
  3. Capacity: Jumlah maksimum elemen yang dapat diambil dari array yang mendasari tanpa alokasi ulang.

Berikut contoh cara kerja slice pada array yang mendasarinya:

arr := [5]int{10, 20, 30, 40, 50}
slice := arr[1:4] // Mengambil elemen dari indeks 1 hingga 3

Pada contoh ini, slice memiliki pointer ke elemen kedua dari arr, panjang 3, dan kapasitas 4 (karena elemen di arr yang tersedia setelah indeks 1 adalah empat elemen). Maka output dari variabel slice adalah

[20 30 40]

Perbedaan Slice dan Array

PerbedaanArraySlice
UkuranTetap saat deklarasiDinamis, dapat bertambah atau berkurang
InisialisasiPerlu panjang tetapDapat diinisialisasi tanpa panjang
PointerLangsung mengarah ke elemenMemiliki pointer ke array yang mendasari
FungsiKurang fleksibel untuk data dinamisFleksibel untuk pengelolaan data dinamis

Membuat Slice

Ada beberapa cara untuk membuat slice di Golang:

1. Menggunakan Literal Slice:

nums := []int{1, 2, 3, 4, 5}

Di sini, nums adalah slice dengan panjang 5 dan kapasitas 5.

output ketika di print dengan fmt.Println adalah:

[1 2 3 4 5]

2. Menggunakan Fungsi `make`:

nums := make([]int, 5) // Membuat slice dengan panjang 5 dan kapasitas 5

output ketika di print dengan fmt.Println adalah:

[0 0 0 0 0]

Kita juga bisa menambahkan kapasitas tambahan:

nums := make([]int, 5, 10) // Panjang 5, kapasitas 10

output ketika di print dengan fmt.Println adalah:

[0 0 0 0 0]

3. Dari Array yang Sudah Ada:

arr := [5]int{10, 20, 30, 40, 50}
slice := arr[1:4] // Membuat slice dari elemen indeks 1 hingga 3

output ketika di print dengan fmt.Println adalah:

[20 30 40]

Best Practice Penggunaan Slice

1. Inisialisasi dengan Kapasitas yang Memadai

Saat membuat slice besar, gunakan make dengan kapasitas yang mendekati perkiraan kebutuhan. Ini menghindari alokasi memori tambahan saat append menambah elemen.

users := make([]string, 0, 100) // Slice dengan kapasitas awal 100

2. Gunakan append untuk Menambah Elemen

append adalah cara standar menambahkan elemen ke slice. Fungsi ini secara otomatis mengalokasikan ulang memori jika kapasitas slice habis.

slice := []int{1, 2, 3}
slice = append(slice, 4, 5) // Slice menjadi [1, 2, 3, 4, 5]

3. Hindari Pemotongan Berlebih pada Slice yang Besar

Memotong (reslicing) dengan kapasitas terlalu besar dapat menyebabkan penggunaan memori yang tidak perlu.

largeSlice := make([]int, 1000)
smallSlice := largeSlice[:10] // Hanya butuh 10 elemen, tetapi kapasitas tetap 1000

Contoh Penggunaan Slice

package main

import "fmt"

func main() {
    // Inisialisasi slice dengan literal
    nums := []int{1, 2, 3, 4, 5}

    // Menambah elemen ke slice
    nums = append(nums, 6)

    // Memotong slice
    subNums := nums[1:4]

    fmt.Println("Slice utama:", nums)
    fmt.Println("Slice hasil pemotongan:", subNums)
}

Cheatsheet Slice

KodeKeterangan
make([]T, length, capacity)Membuat slice dengan tipe T, panjang length, kapasitas capacity
len(slice)Mendapatkan panjang slice
cap(slice)Mendapatkan kapasitas slice
append(slice, elem)Menambahkan elemen ke slice
slice[start:end]Memotong slice dari indeks start hingga end-1
copy(dest, src)Menyalin elemen dari src ke dest

Kesimpulan

Slice di Golang adalah tipe data yang sangat berguna dan fleksibel untuk mengelola kumpulan data dengan panjang yang dinamis. Dengan memahami anatomi, perbedaan dengan array, serta praktik terbaik, kita dapat menggunakan slice secara efektif dan efisien.

Artikel ini dibukukan pada buku Belajar Bahasa Pemrograman Go
Navigasi Konten