Junior
Генерикҳо дар барномасозӣ чистанд?
sobes.tech AI
Ҷавоб аз AI
Генерикҳо (Generics) роҳи навиштани коди чандир ва такрорӣ-истифодашаванда мебошанд, ки бо ҳар гуна намудҳои додаҳо кор мекунанд ва ҳамзамон бехатарии намудро нигоҳ медоранд. Онҳо имкон медиҳанд, ки муайян кардани намудро то вақти истифода ба таъхир гузорем.
Афзалиятҳои асосӣ:
- Пешгирии такрории коди: Шумо метавонед алгоритм/структураи додаҳоро нависед, ки бо намудҳои гуногун кор мекунад.
- Бехатарии намуд: Компилятор мувофиқати намудҳоро дар вақти компиляция санҷида, хатогиҳои вақти иҷроиро, ки бо намудҳои нодуруст алоқаманданд, пешгирӣ мекунад.
- Коди бештар баёнӣ: Ниятҳои таҳиягарро дар бораи намудҳои додаҳо равшантар нишон медиҳад.
Масалан дар Swift:
Сохтори умумии Stack:
struct Stack<Element> {
// Element, ҳамчун намудҳои унсурҳои массив истифода мешавад
private var items: [Element] = []
// Element, ҳамчун намуди параметр истифода мешавад
mutating func push(_ item: Element) {
items.append(item)
}
// Element, ҳамчун намуди баргардонидашаванда истифода мешавад
mutating func pop() -> Element {
return items.removeLast()
}
}
Истифода бо сатрҳо:
var stringStack = Stack<String>()
stringStack.push("hello")
stringStack.push("world")
let lastString = stringStack.pop() // lastString намуд String
Истифода бо рақамҳо:
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
let lastInt = intStack.pop() // lastInt намуд Int
Бе истифодаи генерикҳо, бояд структураҳои алоҳида барои Stack<String>, Stack<Int> ва ғайра нависед ё ба усулҳои камтар бехатар муроҷиат кунед (масалан, Any).