そーす

福岡在住のプログラマ

Structural Subtyping(構造的部分型)についての現時点での理解

なんで気になったかというとたまたまフォローしてる人らがタイムラインで言い合いしててそこの出てきたから。

togetter.com

恥ずかしながらStructual Subtypingって初めて聞きました。

このブログの説明読みました。

yuroyoro.hatenablog.com

「Structural Subtypingを用いることで静的なduck typingが可能になります」

なるほど!

という感じでした。

つまり、swiftで書くとしたら

protocol StringJoinable{
  func join(s1: String: s2: String): String
}

let s1 = "s1"
let s2 = "s2"
func joinStrings(joinable: StringJoinable){
     joinable.join(s1, s2)
}

//HogeクラスはStringJoinableを適用していないが、StringJoinableと同じメソッドを持っている
class Hoge{
  func join(s1: String: s2: String): String{
      return "Hoge: \(s1)\(s2)"
  }
}

joinStrings(Hoge())//これはもちろんコンパイルエラーだが、これがコンパイル通るということがStructural Subtypingができるといこと

という認識でいいのかな…