Kapasitas slice
Pelajaran 7 dari 21 dalam kursus Slice dan Map di Go di Coddy.
Salah satu hal yang mungkin membingungkan saat menangani slice adalah perbedaan antara panjang dan kapasitas. Dalam pelajaran ini, kita akan memahami kapasitas slice.
Baiklah, mari kita mulai. Deklarasi ini membuat slice baru seperti ini:
var names []stringIni adalah slice baru, jadi slice ini tidak memiliki array pendukung, sehingga semua field-nya bernilai nol.
Saat kita menggunakan fungsi <strong>len</strong> atau fungsi <strong>cap</strong> pada slice ini, keduanya akan mengembalikan 0. Namun, saat kita menggunakan literal slice, kali ini Go membuat array pendukung baru:
names := []string{"Python", "Java", "Rust"}Di sini, ada tiga elemen dalam literal terakhir ini. Itulah sebabnya array pendukung slice <strong>names</strong> juga memiliki tiga elemen. Jadi, kapasitas adalah panjang array pendukung sebuah slice, bukan panjang slice itu sendiri.
Untuk lebih memahami hal ini, mari kita lihat contoh lain:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]Jadi, menurutmu, berapa kapasitas slice <strong>nameSlice</strong> dalam contoh ini?
Jawabannya adalah 4. Di sini, kita mulai dari indeks 1 hingga akhir slice, dan kita bisa memeriksanya:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))Hasilnya adalah:
[Golang Rust JavaScript Haskell]
4Jadi, ingat, untuk menghitung kapasitas, kita mulai dari posisi pertama hingga akhir slice.
Meskipun kita melakukan sesuatu seperti ini:
names := []string{"Python", "Golang", "Rust", "JavaScript", "Haskell"}
nameSlice := names[1:4]
fmt.Println(nameSlice)
fmt.Println(cap(nameSlice))Di sini, panjang berubah, dan kita hanya mendapatkan <strong>tiga elemen</strong>:
[Golang Rust JavaScript]
4Namun, kapasitas tetap sama. Jadi, perhatikan hal ini: panjang tidak selalu sama dengan kapasitas."
Tantangan
MudahDalam kode yang diberikan, kita mendefinisikan slice dengan 10 elemen.
- Lakukan pengirisan untuk membuat slice lain dan tampilkan kapasitas slice tersebut di layar. Hasilnya harus sama dengan 6.
Coba sendiri
package main
import (
"fmt"
)
func main() {
// Slice berisi 10 elemen
lang := []string{"Python", "Java", "JavaScript", "C++", "Go", "Ruby", "Swift", "Rust", "PHP", "Kotlin"}
// Lakukan slicing di sini
// Lengkapi fungsi Print
fmt.Println("the capacity of this Slice is :" ?)
}Semua pelajaran di Slice dan Map di Go
Latihan sendiri: Compiler Go online