【新機能】作り忘れたまとめはありませんか?31日前まで期間指定してまとめが作れる高度な検索ができました。有料APIだからツイートの漏れはありません!

variantという単語から派生した色々な単語の整理

covariant, contravariant, nonvariant, invariant…など。
用語
2628view 1コメント
9
ログインして広告を非表示にする
なぎせ ゆうき @nagise 2010-11-06 16:48:26
共変 (covariant)反変 (contravariant) 非変(non-variant)という用語があるのか。これは便利だが意図が通じるかは疑問だな。
都元ダイスケ🍅 @daisuke_m 2010-11-06 16:52:15
@nagise 「なんちゃらvariantは、それぞれenumの要素となる」ようなイメージで見ると全く理解できない。ってか、最初そんな目で見てしまって理解できず、未だに混乱するw
都元ダイスケ🍅 @daisuke_m 2010-11-06 16:52:54
covariant contravariant invariant nonvariant variant型…
なぎせ ゆうき @nagise 2010-11-06 16:55:26
うーむ。うざいw @daisuke_m covariant contravariant invariant nonvariant variant型…
都元ダイスケ🍅 @daisuke_m 2010-11-06 16:58:58
@nagise variant型の反対がnonvariant型だったりすると、すごい直感的なんだけどね。covariant戻り値の反対がinvariant戻り値で、不変条件invariantの反対がcontravariantだったりなんかして。
なぎせ ゆうき @nagise 2010-11-06 17:03:51
Javaでいうとvariant型 -> Object型、covariant型 -> サブクラス、contravariant型 -> ?super Hoge、invariant型 -> 機能としてはないけど、不変型というとStringとかIntegerとか
Suguru ARAKAWA @ashigeru 2010-11-06 17:05:08
ついでに、ワイルドカードは型そのものではなくて、型の範囲を示すもの。
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:08:51
@ashigeru 「型」自体がそもそも範囲を表していそうないめーじ.
Suguru ARAKAWA @ashigeru 2010-11-06 17:10:28
@daisuke_m それはサブタイピングつきのオブジェクト指向をやってるからそう思ってしまうだけ>型自体が範囲。あれは、起動元がスーパータイプに変換してからメソッドを呼び出していると考えると、型はしっかり合ってる
なぎせ ゆうき @nagise 2010-11-06 17:06:28
ほんとはジェネリクスの代入互換性の話をblogに書こうと思ってるんだけど、ややこしいから説明がまた壮大になっちゃうんだよね…
Suguru ARAKAWA @ashigeru 2010-11-06 17:02:45
@daisuke_m variantはもともとvariationの意味で変わる、という意図だから、co-, contra-は何かと一緒に変わるときにどう変わるか、という方向性ね。一応
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:05:39
@ashigeru なるほど。しかし、「変わる」という非常に抽象的な動詞に対して、副詞成分(in/contra/co)が入ってくるくせに、主語と目的語がハッキリしないのでなにもイメージできんのだ…。何が何に変わるんだっ。 突然「変わるわよっ♪」と言われた時並の動揺。
Suguru ARAKAWA @ashigeru 2010-11-06 17:07:37
@daisuke_m だから、メソッドの文脈でいえば、そのメソッドをenclosingする型がサブタイプになるとき、戻り値もサブタイプになるべきで、それはco-*。引数はスーパータイプになるべきで逆にcontra-*。
なぎせ ゆうき @nagise 2010-11-06 17:09:11
ジェネリックなパラメタライズされたクラス、つまり型変数をとるHoge<T>のような型の代入互換性について考えるとき、OOPの単純な代入互換性とは別世界に足を踏み入れる事になるからな。しかも底なし沼のような世界なんだぜ
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:10:44
@ashigeru うは、この説明がストンと落ちた。co-とcontra-は、ほとんどはメソッドの文脈でしか使わないモノ?
なぎせ ゆうき @nagise 2010-11-06 17:11:28
「メソッドをenclosingする型」のニュアンスが理解出来ない。メソッドが定義されているクラスのこと?いやそれだと意味がおかしくなるような @ashigeru @daisuke_m だから、メソッドの文脈でいえば、そのメソッドをenclosingする型がサブタイプになるとき
きょん@うさみみモード @kyon_mm 2010-11-06 17:12:08
期待あげ! RT @nagise: ほんとはジェネリクスの代入互換性の話をblogに書こうと思ってるんだけど、ややこしいから説明がまた壮大になっちゃうんだよね…
なぎせ ゆうき @nagise 2010-11-06 17:13:19
プログラミングやってて実動作から概念を学んでるから抽象概念の名前といまいちイメージが結びつかないんだ… orz
Suguru ARAKAWA @ashigeru 2010-11-06 17:13:47
@daisuke_m というか、複合型と呼ぶような、複数の型からなるものについて呼ぶのが多い。関数a->bのa->bを(複合)型とすると、u:>a, v<:bとなるような u->vは、a->bのサブタイプなのよ。このときの要素型a, b, u, vの性質がco-とかcontra-
なぎせ ゆうき @nagise 2010-11-06 17:14:46
ここまでくるとほとんどアカデミックな型システムの話に近いから、不勉強な自分が経験則で語るというのはオコガマシイのだけどね @kyon_mm 期待あげ!
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:14:56
@nagise そのメソッドを定義しているクラス、だけではなく、そのサブクラスも含む感じでは?
Suguru ARAKAWA @ashigeru 2010-11-06 17:15:52
@nagise 厳密ではないですが、Javaだとそんな感じです>enclosingする型。実際は関数そのものの型でサブタイピングを考えるときに、共変とか反変とかつかいます @daisuke_m
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:16:07
ある型Aをある型Bとして扱っても大丈夫なとき、AはBのサブタイプであると言い、A <: Bなどと表記する
都元ダイスケ🍅 @daisuke_m 2010-11-06 17:17:32
@ashigeru 「関数a->b」の -> 記号がわからん。数学記号?
残りを読む(30)

ブックマークしたタグ

あなたの好きなタグをブックマークしておこう!話題のまとめを見逃さなくなります。

コメント

Terry (とのっちょ)@NZ @tonoccho 2010-11-06 18:37:53
variantもvary+antではなかろうか。antは~するもの、という接尾辞だっけ。 coは一緒に、とか、共有して contraはなんちゃらに反してとかなんチャラとは反対にとか inは、意味を反対にする そんな接頭辞 そこから考えるに、covariantは何かが変わると一緒に変わる物(一方が増えると一緒に増えるとか)、contravariantは、何かが変わらないと変わっちゃうもの(一方が増えないと増えていくとか)、か、何かが変わるとそれとは反対の方向に変わる物(何かが増えると減っていくとか)。
ログインして広告を非表示にする
ログインして広告を非表示にする