Menu
CoddyTech

Definiowanie interfejsu

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 13 z 68.

Teraz, gdy już rozumiesz, czym są interfejsy, poznajmy sposób ich definiowania w Go. Interfejs definiuje się za pomocą słowa kluczowego interface, po którym następuje zestaw sygnatur metod ujętych w nawiasy klamrowe.

Oto podstawowa składnia definiowania interfejsu:

type InterfaceName interface {
    MethodName() ReturnType
    AnotherMethod(parameter Type) ReturnType
}

Zauważ, że interfejs zawiera wyłącznie sygnatury metod — nazwę metody, parametry i typy zwracane — ale nie zawiera implementacji. Interfejs nie określa, jak te metody powinny działać, a jedynie jakie metody muszą istnieć.

Na przykład tak można zdefiniować prosty interfejs Shaper, który wymaga, aby każdy implementujący go typ miał metodę Area:

type Shaper interface {
    Area() float64
}

Ten interfejs określa kontrakt: każdy typ, który ma być uznawany za Shaper, musi mieć metodę Area, która nie przyjmuje żadnych parametrów i zwraca wartość typu float64. Interfejs nie interesuje się tym, jaki to typ ani jak oblicza pole — liczy się tylko to, że istnieje metoda o odpowiedniej sygnaturze.

challenge icon

Wyzwanie

Łatwy

W tym wyzwaniu poćwiczysz definiowanie interfejsów w Go, tworząc prosty system odtwarzacza multimedialnego. Zdefiniujesz interfejs, który ustanawia kontrakt dla różnych typów urządzeń multimedialnych.

Otrzymasz jedno wejście:

  • Ciąg znaków reprezentujący akcję multimedialną (np. "play", "pause" lub "stop")

Twoim zadaniem jest:

  1. Zdefiniować interfejs o nazwie MediaPlayer z trzema sygnaturami metod:
    • Play(), która zwraca ciąg znaków
    • Pause(), która zwraca ciąg znaków
    • Stop(), która zwraca ciąg znaków
  2. Na podstawie wejściowej akcji wypisać odpowiednią sygnaturę metody z interfejsu MediaPlayer w formacie: "MediaPlayer interface requires: [MethodName]() string"

Ten program na razie nie używa MediaPlayer i to jest w porządku: Go kompiluje interfejs nawet wtedy, gdy żaden typ go nie implementuje. Instrukcje print po prostu informują o sygnaturze metody wymaganej przez twój interfejs dla danej akcji. W następnej lekcji utworzysz typ, który implementuje MediaPlayer, i wywołasz jego metody.

Nazwy metod powinny zaczynać się wielką literą (być eksportowane), ponieważ są częścią definicji interfejsu. Dla wejścia "play" wypisz "MediaPlayer interface requires: Play() string", dla "pause" wypisz "MediaPlayer interface requires: Pause() string", a dla "stop" wypisz "MediaPlayer interface requires: Stop() string".

To wyzwanie skupia się na podstawowej koncepcji definiowania interfejsów za pomocą sygnatur metod, ustanawiających kontrakt, który musi spełnić każdy typ implementujący dany interfejs.

Spróbuj swoich sił

package main

import "fmt"

func main() {
    // Odczytaj dane wejściowe
    var action string
    fmt.Scanln(&action)
    
    // TODO: Zdefiniuj tutaj interfejs MediaPlayer
    
    // TODO: Napisz poniżej kod, który obsłuży action i wypisze wymagany wynik
    
    // Wypisz wynik
    // Pamiętaj, aby wypisać wynik w formacie: "MediaPlayer interface requires: [MethodName]() string"
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online