اختبارات

الشريحة 1

ماذا يطبع البرنامج التالي؟


package main

import "fmt"

func main() {
	a := [...]int{0, 1, 2, 3}
	x := a[:1]
	y := a[2:]
	x = append(x, y...)
	x = append(x, y...)
	fmt.Println(a, x)
}

الخيارات:

  • [0 1 2 3] [0 2 3 3 3]
  • [0 2 3 3] [0 2 3 3 3]
  • [0 1 2 3] [0 2 3 2 3]
  • [0 2 3 3] [0 2 3 2 3]

الإجابة: [0 2 3 3] [0 2 3 3 3]

شغّله على Go play.

النقاط الأساسية:

  • في البداية، تكون الشريحة y هي [2 3]، والشريحة x هي [0] مع ثلاث خانات عناصر زائدة (بعبارة أخرى، سعتها 4)،
  • يغيّر استدعاء append الأول الشريحة x إلى [0 2 3] مع خانة عنصر زائدة واحدة. وبما أن الشريحة x والمصفوفة a تتشاركان العناصر (قبل السطر 10)، تُغيَّر المصفوفة a إلى [0 2 3 3]. والشريحة y والمصفوفة a تتشاركان العناصر أيضاً، لذا تُغيَّر الشريحة y إلى [3 3].
  • ولأن الشريحة x لا تملك سعة زائدة كافية، يخصص استدعاء append الثاني مصفوفة أساسية جديدة للشريحة x. لذا لا يعدّل الاستدعاء المصفوفة a. وتُغيَّر الشريحة x إلى [0 2 3 3 3].