1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoのインターフェースをSwiftベースで理解する

Posted at

Go言語を初めて学習した時、構造体はどのような時にインタフェースを満たすのか、理解するのに少し苦労しました。しかし、よく読み解いていくと、「あれ、これってSwiftでいうProtocolではないだろうか?」と思いました。というわけで、GoのインターフェースをSwiftベースで置き換えてみようと思います。

完全自分用の学習備忘録として残します。

インターフェース(Go)

type Vehicle interface {
	Accelerate()
	Brake()
}

type Car struct {
	color string
}

func (c Car) Accelerate() {
	fmt.Println("車が加速する")
}

func (c Car) Brake() {
	fmt.Println("車がブレーキをかける")
}

type Bike struct {
	color string
}

func (c Bike) Accelerate() {
	fmt.Println("バイクが加速する")
}

func (c Bike) Brake() {
	fmt.Println("バイクがブレーキをかける")
}

func drive(vehicle Vehicle) {
	vehicle.Accelerate()
	vehicle.Brake()
}

func main() {
	var car Car = Car{}
	drive(car)

	var bike Bike = Bike{}
	drive(bike)
}

以上のコードをSwiftベースで置き換えてみます。

Swift(Protocol)

import Foundation

// Vehicleプロトコルを定義
protocol Vehicle {
    func accelerate()
    func brake()
}

// Car構造体を定義し、Vehicleプロトコルに準拠
struct Car: Vehicle {
    var color: String

    func accelerate() {
        print("車が加速する")
    }

    func brake() {
        print("車がブレーキをかける")
    }
}

// Bike構造体を定義し、Vehicleプロトコルに準拠
struct Bike: Vehicle {
    var color: String

    func accelerate() {
        print("バイクが加速する")
    }

    func brake() {
        print("バイクがブレーキをかける")
    }
}

func drive(vehicle: Vehicle) {
    vehicle.accelerate()
    vehicle.brake()
}

let car = Car(color: "Red")
drive(vehicle: car)

let bike = Bike(color: "Blue")
drive(vehicle: bike)

参考記事

とってもやさしいGo言語入門

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?