Sobes.tech
Junior — Middle

Kā tiek nodots slice funkcijai programmēšanas valodā?

sobes.tech AI

Atbilde no AI

Go valodā, šķēle (slice) tiek nodota funkcijai pēc vērtības, bet šķēle satur norādi uz masīvu, kā arī tās garumu un kapacitāti. Tas nozīmē, ka, nododot šķēli funkcijai, tiek kopēta šķēles struktūra, bet ne dati, uz kuriem tā norāda.

Tādēļ izmaiņas šķēles elementos funkcijas iekšienē atspoguļojas oriģinālajā masīvā, bet šķēles pati (piemēram, piešķirot tai jaunu šķēli) neietekmē ārējo šķēli.

Piemērs:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // mainīs oriģinālā masīva elementu
    s = append(s, 200) // mainīs lokālo šķēli, ārējais nemainīsies
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // Izvadīs: [100 2 3]
}

Tādējādi, šķēle tiek nodota pēc vērtības, bet iekšējā norāde ļauj izmaiņas elementos redzēt ārpus funkcijas.