Go言語の勉強を初めて5日ほどです。
現在、インターフェースについて勉強中です。
自分でサンプルプログラムを作ってみました。
まずは、以下を見て頂けますでしょうか。
package main import "fmt" type Add struct {} func (x Add) calculate(a int, b int) int { return a+b } type Sub struct {} func (x Sub) calculate(a int, b int) int { return a-b } type Mul struct {} func (x Mul) calculate(a int, b int) int { return a*b } type Div struct {} func (x Div) calculate(a int, b int) int { return a/b } func main() { var a Add var s Sub var m Mul var d Div fmt.Println("和:", a.calculate(7, 2)) fmt.Println("差:", s.calculate(7, 2)) fmt.Println("積:", m.calculate(7, 2)) fmt.Println("商:", d.calculate(7, 2)) }
これをインターフェースを使って書き直したものが以下です。
package main import "fmt" type Calc interface{ calculate(a int, b int) int } type Add struct {} func (x Add) calculate(a int, b int) int { return a+b } type Sub struct {} func (x Sub) calculate(a int, b int) int { return a-b } type Mul struct {} func (x Mul) calculate(a int, b int) int { return a*b } type Div struct {} func (x Div) calculate(a int, b int) int { return a/b } func main() { var a Add var s Sub var m Mul var d Div var calc Calc calc = a fmt.Println("和:", calc.calculate(7, 2)) calc = s fmt.Println("差:", calc.calculate(7, 2)) calc = m fmt.Println("積:", calc.calculate(7, 2)) calc = d fmt.Println("商:", calc.calculate(7, 2)) }
どちらも同じ出力結果となります。
この2つのコードを比べても、インターフェースを使う利点・必要性がイマイチよく分かりません。
インターフェースを使ったコードの方が良いのでしょうか?
あるいはサンプルコードが不適ということはあるでしょうか?
当方、オブジェクト指向の知識・経験は少ないです。
一応、継承・ポリモーフィズについて、さらっとネットで調べはしました。
例えば、こちらのWebページなど
https://qiita.com/Akatsuki_py/items/3e35ba326ff254a6790d
https://teratail.com/questions/60856
ご回答頂けると嬉しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/23 08:53
2019/05/24 02:13