اختبارات

ثابت 2

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


package main

const X = 3

func main() {
	const (
		X = X + X
		Y
	)

	println(X, Y)
}

الخيارات:

  • 6 6
  • 6 12

الإجابة: 6 12

شغِّله على Go play.

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

  • تقول مواصفة Go: داخل قائمة تعريف ثوابت محاطة بأقواس، يمكن حذف قائمة التعبيرات من أي ConstSpec عدا الأول. وقائمة فارغة كهذه مكافئة للاستبدال النصي لأول قائمة تعبيرات غير فارغة سابقة، ونوعها إن وُجد.
  • سيحجب المعرّف المحلي المعرّف العام الذي يحمل الاسم نفسه.

تعريف الثابت في شيفرة الاختبار مكافئ للتعريف التالي:


	const (
		X = X + X // هنا كِلا "X" هما المعرّف العام
		Y = X + X // هنا كِلا "X" هما المعرّف المحلي
	)

يُقيَّم المعرّف المحلي X بالقيمة 6 في وقت التصريف، لذا يُقيَّم الثابت Y بالقيمة 12 (في وقت التصريف أيضاً).

يرجى ملاحظة أن نتيجة الإخراج كانت 6 6 عند استخدام سلسلة أدوات Go v1.17 وما قبلها. وقد أُصلح هذا الخطأ منذ سلسلة أدوات Go v1.18.

وبالمثل، منذ سلسلة أدوات Go 1.18، يطبع البرنامج التالي 0 0. أما قبل سلسلة أدوات Go 1.18، فكان يطبع 1 2 (وهو خطأ).


package main

func main() {
	const (
		iota = iota
		X
		Y
	)
	println(X, Y)
}