Sobes.tech
Junior — Middle

Чӣ мешавад вақте ки усули append даъват мешавад ва чаро он як порции навро бармегардонад?

sobes.tech AI

Ҷавоб аз AI

Дар Go, усул append истифода мешавад барои илова кардани унсурҳо ба срез (slice). Вақте ки append даъват мешавад, ҳоло корҳо чунин мешаванд:

  1. Агар қобилияти (capacity) срез кофӣ бошад, унсури нав ба массиви мавҷуда илова мешавад ва срези нав, ки ба қисми навсозишудаи массив ишора мекунад, баргардонида мешавад.
  2. Агар қобилият кофӣ набошад, массиви нав бо қобилияти зиёдшуда сохта мешавад, унсурҳои кӯҳнаро ба он нусхабардорӣ мекунанд, ва пас унсури нав илова мешавад.

Аз ин рӯ, append срези навро баргардон мекунад, зеро:

  • Дар ҳолати васеъ кардани қобилият, срези ишоракунӣ ба массиви нав баргардонида мешавад.
  • Агар қобилият кофӣ бошад, срези ишоракунӣ ба ҳамон массив бо дарозии зиёдшуда баргардонида мешавад.

Ҳамеша муҳим аст, ки натиҷаи append ба тағирёбанда баргардонида шавад, то ки ишора ба срези навсозишударо аз даст надиҳед:

s := []int{1, 2, 3}
s = append(s, 4)  // ҳоло s ба срези бо унсурҳои [1 2 3 4] ишора мекунад

Ба ин тариқ, append срези навро баргардон мекунад, зеро дар дохили он метавонад массиви асосиро тағир диҳад, ва бояд ишора ба он навсозӣ шавад.