Middle
Ի՞նչն է տարբերությունը Go ինտերֆեյսի և այլ ծրագրավորման լեզուների ինտերֆեյսների միջև։
sobes.tech AI
Պատասխան AI-ից
Go ինտերֆեյսների հիմնական տարբերությունը այն է, որ դրանք իրականացնում են անուղղակի (անհայտորեն):
Այլ լեզուներում (օրինակ, Java, C#), դասը պետք է հստակ հայտարարի, որ այն իրականացնում է որոշակի ինտերֆեյս (անհայտ իրականացում):
Go-ում ցանկացած տիպ ինքնաբերաբար բավարարում է ինտերֆեյսը, եթե այն իրականացնում է այդ ինտերֆեյսում սահմանված բոլոր մեթոդները: Անհրաժեշտ չէ հստակ հայտարարություն:
Օրինակ (Go):
// Ինտերֆեյսի սահմանում
type Reader interface {
Read(p []byte) (n int, err error)
}
// Կառուցվածքի սահմանում
type FileReader struct {
// ... դաշտեր
}
// Read մեթոդի իրականացում FileReader-ի համար
func (fr FileReader) Read(p []byte) (n int, err error) {
// ... կարդալու տրամաբանություն
return 0, nil // օրինակ՝ տեղակալ
}
// FileReader անուղղակիորեն բավարարում է Reader ինտերֆեյսը,
// քանի որ ունի համապատասխան Read մեթոդ:
Օրինակ (Java - համեմատության համար):
// Ինտերֆեյսի սահմանում
interface Reader {
int read(byte[] p);
}
// Կառուցվածքի սահմանում
class FileReader implements Reader { // հստակ իրականացում
// ... դաշտեր
@Override
public int read(byte[] p) {
// ... կարդալու տրամաբանություն
return 0; // օրինակ՝ տեղակալ
}
}
Go-ում անուղղակի իրականացման հիմնական առավելությունները:
- Անջատված դիզայն: Позволяет новым գրադարաններին սահմանել ինտերֆեյսներ, որոնք կարող են լինել բավարարված արդեն գոյություն ունեցող տիպերով՝ առանց նրանց փոփոխելու:
- Ենթակա: Հեշտացնում է ընդհանուր ֆունկցիաների ստեղծումը, որոնք աշխատում են տարբեր տիպերով, որոնք բավարարում են նույն ինտերֆեյսին:
- Անհրաժեշտ չէ "implements": Կրճատում է բոյլերփլեյթ կոդը:
- Duck typing: Եթե տիպը նման է բադի և quack-ում է ինչպես բադը, ապա դա բադ է: Եթե տիպը իրականացնում է ինտերֆեյսի մեթոդները, այն կարող է օգտագործվել որպես այդ ինտերֆեյս:
(Նշում՝ այս թարգմանությունը տարբերվում է մյուսներից՝ ավելացված է լրացուցիչ բացատրություններ և հստակեցումներ):