- スレ立てるまでもない質問はここで 149匹目
357 :デフォルトの名無しさん[]:2019/06/24(月) 07:02:00.65 ID:218UFAwP - >>350
あ、わかったかも。 「(クラス毎ではなく)オブジェクト毎に所持メソッドやメンバー変数を変えられる」 これがプロトタイプの本質だって言ってるんですね。 否定してる最初の説明でもその意味だと思うけど、 「動的にクラス定義を変更してその全インスタンスの振る舞いがまとめて変わる」 のか 「特定のオブジェクト限定で振る舞いを変えられる」 のかが紛らわしい。 まあでも当然後者の意味だと思うけど。 クラスが動的に再定義されちゃったら型安全壊れるし、 コンパイル時にバグを見つけれる事が強みなので、それをやる言語は無いはず。
|
- スレ立てるまでもない質問はここで 149匹目
359 :デフォルトの名無しさん[]:2019/06/24(月) 08:27:58.03 ID:218UFAwP - ああそうか
まあでもその存在しないメソッドを呼んでしまったとかで例外が出ちゃうから、 クラスを使用している言語はオブジェクト別の所持メソッドの変更を許可しないだろうということです。 それをやっちゃうとせっかくのクラスによる安全性を放棄してしまう
|
- スレ立てるまでもない質問はここで 149匹目
361 :デフォルトの名無しさん[]:2019/06/24(月) 10:51:03.90 ID:218UFAwP - ダックタイピング調べてみた。
これはたぶんJavaプログラマー的に言えば interfaceを明記しなくても自動判別してくれるということだろう。 メソッド側が期待するinterfaceとクラスが実装しているinterfaceを自動判別する。 https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0 class Duck def sound 'quack' end end もしこれのsoundメソッドのとこをコメントアウトしたら test(Duck.new)がコンパイルエラーになるんだろう。 しかしプロトタイプベースだったらコンパイル時にエラーを出すのは無理だろう。 しかしクラスのメリットは確かにコンパイル時エラーの検出のためだけではない。 プロトタイプかつクラスを使用する言語があったとしたら、 その場合クラスは単に抽象的な意味を記述するため、あるいは クローンの連鎖の大元になるためにある。 そんな言語もあってもいいのかもしれない。
|
- スレ立てるまでもない質問はここで 149匹目
362 :デフォルトの名無しさん[]:2019/06/24(月) 11:08:38.28 ID:218UFAwP - ダックタイピング良く調べてみると
このwikipediaの記事は間違いだって言ってる記事があるな 「そのオブジェクトがどんなメソッドを所持しているかを事前に知らずにとにかく呼び出してしまう」 つまり動的バインディングのような概念である、と。 プロトタイプベース系の話だな、それなら。 wikipediaの記事からは、クラスがあって、 interfaceを書かなくても多態性が実現できるinterface自動判別の仕組みだ、 という印象を受ける。
|
- スレ立てるまでもない質問はここで 149匹目
363 :デフォルトの名無しさん[]:2019/06/24(月) 11:11:04.94 ID:218UFAwP - https://en.wikipedia.org/wiki/Duck_typing#Criticism_of_the_term_itself
>AttributeError: 'Whale' object has no attribute 'fly' 英語版wikipediaの記事だと、「メソッドがあるかないかを事前に気にせずにとにかく呼び出してしまう」 というプロトタイプベース的な意味でダックタイピングという言葉を使用しているようだ。
|
- TypeScript part3
252 :デフォルトの名無しさん[]:2019/06/24(月) 11:41:32.01 ID:218UFAwP - この研究によるとTypeScriptは最もバグ発生率が低い言語なんだけどその理由とか体感とかありますか?
https://web.cs.ucdavis.edu/~filkov/papers/lang_github.pdf >TypeScript −1.32 (0.40)∗∗ −2.15 (0.98)∗ −1.34 (0.41)∗∗ −0.34 (0.07)∗∗∗
|