CodeBlanks Logo Icon CodeBlanks

Slice tanımı

Slice ile dinamik dizileri tanımlamayı öğrenirsin.

Slice tanımı

Slice (dilim), bir dizinin bir bölümüne bakan esnek uzunluklu bir görünümdür. Tür yazımında uzunluk yoktur: []int.

a := []int{1, 2, 3}      // değişmez değerle
b := make([]int, 5)      // [0 0 0 0 0]
var c []int              // nil dilim, len 0
fmt.Println(len(a), len(b), c == nil)  // 3 5 true

Bir dilim üç şey tutar: alttaki diziye işaretçi, uzunluk (len) ve kapasite (cap).

nil ve boş dilim

var s []int nil bir dilimdir; s := []int{} ise boş ama nil olmayan bir dilimdir. İkisinde de len 0'dır, range ve append sorunsuz çalışır. Fark JSON'da görünür: nil dilim null, boş dilim [] olarak kodlanır. Dilimler == ile karşılaştırılamaz (yalnızca nil ile); içerik karşılaştırması için slices.Equal kullanılır.

Uygulama Bağımsız kopya

a := []int{1, 2, 3} tanımla. b := make([]int, len(a)) ve copy(b, a) ile kopya oluştur, b[0] = 99 yap ve a ile b'yi tek satırda yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func main() {
    a := []int{1, 2, 3}
    b := make([]int, len(a))
    copy(b, a)
    b[0] = 99
    fmt.Println(a, b)
}

Beklenen çıktı

[1 2 3] [99 2 3]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>b := a</code> (a bir dilim) sonrasında <code>b[0] = 99</code> yapılırsa <code>a[0]</code> ne olur?

  • panic
  • 99; ikisi aynı diziyi paylaşır Doğru cevap
  • Değişmez
  • 0

Açıklama: Dilim ataması yalnızca başlığı kopyalar; alttaki dizi ortaktır. Bağımsız kopya için copy ya da slices.Clone kullanılır.

2 Hazır uzunluk

Soru
puanlar := ____([]int, 3)  // [0 0 0]
Cevap
puanlar := make([]int, 3)  // [0 0 0]

Açıklama: make verilen uzunlukta, sıfır değerlerle dolu bir dilim oluşturur.

3 Tanım ve sonuç

Kavram Anlamı
[]int{1, 2} len 2
make([]int, 3) [0 0 0]
var s []int nil, len 0
[]int{} Boş, nil değil

Başlangıç bölümündeki tüm dersler