اختبارات

nil 1

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


package main

var x = *new(*int)
var y *int = nil

func f() interface{} {
	return y
}

func main() {
	if f() == nil {
		if x == nil {
			println("A")
		} else {
			println("B")
		}
	} else {
		if x == nil {
			println("C")
		} else {
			println("D")
		}
	}
}

الخيارات:

  • A
  • B
  • C
  • D

الإجابة: C

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

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

  • قيمة الواجهة التي تحمل قيمة ديناميكية غير واجهة تساوي nil ليست واجهة nil. لذا فإن الدالة f تُرجع دائمًا قيمة واجهة غير nil.
  • استدعاء الدالة المضمّنة new يُرجع دائمًا مؤشرًا يشير إلى قيمة صفرية. وهذا يعني أن إلغاء الإشارة إلى المؤشر ينتج قيمة صفرية. والقيمة الصفرية للنوع *int هي nil.