Sobes.tech
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-ում է ինչպես բադը, ապա դա բադ է: Եթե տիպը իրականացնում է ինտերֆեյսի մեթոդները, այն կարող է օգտագործվել որպես այդ ինտերֆեյս:

(Նշում՝ այս թարգմանությունը տարբերվում է մյուսներից՝ ավելացված է լրացուցիչ բացատրություններ և հստակեցումներ):