Tipet kompozite: Vargjet

Vargjet (arrays) dhe struktet (structs) janë tipe agregate, vlerat e tyre janë lista të vlerave të tjera në memorje.
Të gjitha elementet e një vargu janë të një tipi.

Vargjet

Vargu është një sekuencë e gjatësisë fikse të vlerave të tipit të caktuar. Për shkak të gjatësisë fikse, vargjet shumë rrallë përdoren drejtpërsëdrejti. Në vend të përdorimit direkt të vargjeve, në Go rekomandohet përdorimi i segmenteve (slices), të cilave mund t’u shtohen apo largohen elementet, sipas nevojës.

Anëtarëve individualë të vargut mund t’i qasemi duke përdorur indeksin, dhe indeksi i elementit të parë është zeroja. Numrin e elementeve të një vargu e lexojmë me funksionin len().

var a  = [5]int{7, 2, 3, 4, 9} // Vargu a me 5 numra të plotë
fmt.Println(a[0]) // Shtype anëtarin e parë të vargut a
fmt.Println(len(a)) // Trego sa anëtarë i ka vargu a 
fmt.Println(a[len(a)-1]) // Shtype anëtarin e fundit të vargut a

https://play.golang.org/p/r_en5mgRAHS

Me përdorimin e strukturës for mund t’iu qasemi në mënyrë sekuencionale indekseve dhe anëtarëve të një vargu.

package main

import (
    "fmt"
)

func main() {
    var a = [5]int{7, 2, 3, 4, 9}

    // Shtypi indekset dhe vlerat e anëtarëve të vargut
    for i, v := range a {
        fmt.Printf("%d %d\n", i, v)
    }

    // Shtypi vlerat e anëtarëve të vargut
    for _, v := range a {
        fmt.Printf("%d\n", v)
    }
}

https://play.golang.org/p/WQu60tVtTpq

Elementet e një vargu të ri kanë “zero vlerë” , që në rastin e numrave është zero, për stringjet – string i zbrazët (“”). Në shembullin vijues, anëtarit të tretë (me indeksin 2), nuk i është dhënë vlerë, prandaj x[2] ka vlerë 0.

package main

import (
    "fmt"
)

func main() {
    var x [3]int = [3]int{1, 2}
    fmt.Println(x[2]) 
}

https://play.golang.org/p/yJ3X4GPspOD

Nëse i qasemi një indeksi inekzistent, lajmërohet gabimi qysh në fazën e kompajlimit.

package main

import (
    "fmt"
)

func main() {
    var x [3]int = [3]int{1, 2}
    fmt.Println(x[4]) 
}

https://play.golang.org/p/A-rjdARpHMw

Rezultati:

invalid array index 4 (out of bounds for 3-element array)

Nuk është e domosdoshme që të ceket numri i elementeve, sepse duke përdorur ... në vend të numrit, do të formohet një varg me aq vende sa vlera janë dhënë gjatë inicializimit.

package main

import (
    "fmt"
)

func main() {
    x := [...]int{5, 2, 6, 4}
    fmt.Println(x)
}

https://play.golang.org/p/zGwLoriX2FI

Rezultati:

[5 2 6 4]

Kompajleri do ta deklarojë variablin x si varg me 4 elemente, sepse po aq elemente kemi shënuar gjatë inicializimit.

Një varg mund të përmbajë elemente të tipit të njëjtë, por kjo nuk do të thotë se mund të përmbajë vetëm tipet primitive. Në shembullin e mëposhtëm paraqitet një varg me 3 elemente që përmban vlera të tipit struct, i cili përmban 3 fusha të tipit string dhe një të tipit int.

package main

import (
    "fmt"
)

type Libri struct {
    Titulli, Autori, ISBN string
    Faqe                  int
}

func main() {
    a := [3]Libri{
        Libri{Autori: "Dan Brown",
            Titulli: "Origjina",
            ISBN:    "9789994305353",
            Faqe:    616,
        },
        Libri{Autori: "Gabriel Garcia Marquez",
            Titulli: "Për dashurinë dhe demonë të tjerë",
            ISBN:    "9789992731741",
            Faqe:    192,
        },
        Libri{Autori: "Isabel Allende",
            Titulli: "Shuma e ditëve",
            ISBN:    "9789994305155",
            Faqe:    368},
    }

    for _, v := range a {
        fmt.Println(v.Autori, v.Titulli, v.ISBN, v.Faqe)
    }
}

https://play.golang.org/p/gIcygI4736H

Rezultati:

Dan Brown Origjina 9789994305353 616
Gabriel Garcia Marquez Për dashurinë dhe demonë të tjerë 9789992731741 192
Isabel Allende Shuma e ditëve 9789994305155 368

Vargu multidimensional

package main

import (
    "fmt"
)

func main() {
    var vargu [4][3]int
    for i := 0; i <= 3; i++ {
        for j := 0; j <= 2; j++ {
            vargu[i][j] = i + j
        }
    }

    fmt.Println(vargu)
}

https://play.golang.org/p/dbDO_0YG0mo

Rezultati:

[[0 1 2] [1 2 3] [2 3 4] [3 4 5]]
All Rights Reserved Theme by 404 THEME.