Menu
Coddy logo textTech

Definiowanie interfejsu

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

Skoro już wiesz, czym są interfejsy, nauczmy się, jak zdefiniować interfejs 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 jedynie 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żesz zdefiniować prosty interfejs Shaper, który wymaga, aby każdy implementujący go typ miał metodę Area:

type Shaper interface {
    Area() float64
}

Ten interfejs ustanawia umowę: każdy typ, który chce być uznawany za Shaper, musi mieć metodę Area, która nie przyjmuje żadnych parametrów i zwraca wartość typu float64. Interfejs nie dba o to, jaki to typ ani jak oblicza pole — liczy się tylko to, by istniała metoda o prawidłowej 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 określa kontrakt dla różnych typów urządzeń multimedialnych.

Otrzymasz jedno wejście:

  • Łańcuch znaków reprezentujący działanie odtwarzacza multimedialnego (np. "play", "pause" lub "stop")

Twoim zadaniem jest:

  1. Zdefiniować interfejs o nazwie MediaPlayer z trzema sygnaturami metod:
    • Play(), która zwraca łańcuch znaków
    • Pause(), która zwraca łańcuch znaków
    • Stop(), która zwraca łańcuch znaków
  2. Na podstawie działania podanego na wejściu wypisać odpowiednią sygnaturę metody z interfejsu MediaPlayer w formacie: "MediaPlayer interface requires: [MethodName]() string"

Instrukcja wypisywania ma odzwierciedlać zdefiniowany wyżej interfejs. Opisujesz, jakiej sygnatury metody wymaga interfejs MediaPlayer dla danego działania. Możesz potraktować to tak, jakby program sprawdzał i opisywał własny kontrakt interfejsu.

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 z sygnaturami metod, które określają kontrakt, jaki 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