インターフェイス/interfaceとコンセプト/conceptの違いについて教えてください。
Go言語ではこのサイトに従ってインターフェイスの使用例を実装してみると、
go
1package main 2 3import "fmt" 4 5type Animal interface { 6 Cry() 7} 8 9type Dog struct {} 10 11type Cat struct {} 12 13func (dog *Dog) Cry() { 14 fmt.Println("わんわん") 15} 16 17func (cat *Cat) Cry() { 18 fmt.Println("にゃーにゃー") 19} 20 21func letCry(animal Animal) { 22 fmt.Println("鳴け!") 23 animal.Cry() 24} 25 26func main() { 27 dog := new(Dog) 28 cat := new(Cat) 29 letCry(dog) 30 letCry(cat) 31}
こんな感じになり、Nimではコンセプトという機能を使った例として、
nim
1type Animal = concept x 2 cry(x) 3 4type Dog = object 5 6type Cat = object 7 8proc cry(dog: Dog) = 9 echo "わんわん" 10 11proc cry(cat: Cat) = 12 echo "にゃーにゃー" 13 14proc letCry(animal: Animal) = 15 echo "鳴け!" 16 cry(animal) 17 18let dog = Dog() 19let cat = Cat() 20 21letCry(dog) 22letCry(cat)
このようになると思います。どちらも似たようなことをしていると思うのですが、ハッキリと別の言葉が使用されているあたり、何か違う概念に基づいているのだと思います。C++にもコンセプトという言葉があったり、Javaにもインターフェイスという言葉があると思いますが、具体的にどういう概念の違いなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/11 06:21