Sobes.tech
Middle+

Кадом воситаҳои барномасозии умумӣ вуҷуд доранд?

sobes.tech AI

Ҷавоб аз AI

Дар Golang вуҷуд доранд воситаҳои зерин барои барномасозии умумӣ (генерикҳо):

  1. Типҳои параметрӣ: Имкон медиҳанд, ки сохторҳо, интерфейсҳо ва функсияҳо сохта шаванд, ки бо намудҳои гуногуни маълумот кор кунанд, бидуни таъйини қатъӣ дар вақти компилятсия. Типҳои маълумот дар зери сатрҳои мукааб пас аз номи тип ё функсия нишон дода мешаванд.

    // Намунаи сохтор бо типи параметрӣ
    type Stack[T any] struct {
    	elements []T
    }
    
    // Намунаи функсия бо типҳои параметрӣ
    func Map[T, U any](collection []T, f func(T) U) []U {
    	result := make([]U, len(collection))
    	for i, item := range collection {
    		result[i] = f(item)
    	}
    	return result
    }
    
  2. Маҳдудиятҳои тип (Type Constraints): Маъруф кардани маҷмӯи намудҳои, ки метавонанд ҳамчун параметрҳои умумӣ истифода шаванд. Онҳо имкон медиҳанд, ки умумииятро маҳдуд кунанд ва бехатарии амалиётҳоро таъмин кунанд.

    • Интерфейсҳо: Ҳар як интерфейс худ ба худ маҳдудияти тип мебошад.
    • Интерфейсҳои омехта: Имкон медиҳанд, ки чандин намуд ё интерфейсҳоро бо ёрии оператори | пайваст кунанд.
    // Намунаи маҳдудияти тип бо истифода аз интерфейси омехта
    type Number interface {
    	int | int8 | int16 | int32 | int64 |
    		uint | uint8 | uint16 | uint32 | uint64 | uintptr |
    		float32 | float64 |
    		complex64 | complex128
    }
    
    // Функсия, ки маҳдудияти типро истифода мебарад
    func Add[T Number](a, b T) T {
    	return a + b
    }
    

Ин воситаҳо дар Go 1.18 илова карда шуданд. Пеш аз он, барои иҷрои функсионалӣ монанд, аз интерфейсҳо (interface{}) ва рефлексия истифода мешуд, ки бехатарии тип ва иҷроишро кам мекард.