型について

カタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタカタ・・・
5
なぎせ ゆうき @nagise

ふーむ。理解は間違ってなさそうだが、抽象表現になかなかついて行けないな。まだ頭の中が整理しきれてない。もうちょっとなんだが

2010-11-06 17:17:55
Suguru ARAKAWA @ashigeru

@daisuke_m あーすまん。a->bはaをとってbを返す、という関数。ScalaだとA => B みたいな表記だったかな

2010-11-06 17:18:50
なぎせ ゆうき @nagise

そうか。関数がサブタイプかどうかってことを考えるのだな。ことJavaだと関数単体を抽象的に取り扱うことがないが、シンプルに考えるなら関数単位で考えるよな

2010-11-06 17:19:32
都元ダイスケ🍅 @daisuke_m

@ashigeru あ、ごめん、型って書いてあった。

2010-11-06 17:21:12
Suguru ARAKAWA @ashigeru

@daisuke_m 型です。ちなみにA<:BはA extends Bの解釈であってます。

2010-11-06 17:21:54
なぎせ ゆうき @nagise

ここでいう型ってのはなんだろうか。数学的には集合とかだったりするのかしら。群論に近いニュアンス?ある関数にある集合をいれた時、できあがる写像の集合があって、さいしょに関数に投入した集合が部分集合のとき写像がどうなるかみたいな話で理解すればいいのだろうか

2010-11-06 17:22:03
都元ダイスケ🍅 @daisuke_m

「関数a->bのa->bを(複合)型とすると、u:>a, v<:bとなるような u->vは、a->bのサブタイプなのよ。」なるほど。今まで「型」は「型」としてしかみなかったけど、「型->型」も「型」の一種なわけだ。なるほどなるほど。

2010-11-06 17:22:43
都元ダイスケ🍅 @daisuke_m

今まで、型ってのは「変数に与える制約」という視点しかなかったけど、「関数(の引数と戻り値)に与える制約」でもあるのだな。

2010-11-06 17:23:23
Suguru ARAKAWA @ashigeru

@daisuke_m そそ。関数が第一級になると、データに型があるように関数にも型が必要になる。関数にもサブタイピングを入れるときに、どういう性質なら妥当か、と考えると、さっきのとおり要素型をco-だったりcontra-だったりさせると矛盾がないよね、というお話でした。

2010-11-06 17:25:22
なぎせ ゆうき @nagise

TDD名古屋のときに「型は集合か」みたいな議論したなぁ。こういう文脈上では集合ととらえてもいいような気もする

2010-11-06 17:25:37
なぎせ ゆうき @nagise

ある型のインスタンスを集合としてとらえることはできるけど、インスタンスを集めて集合を作ったらそこから型が生まれるかというと生まれないんじゃないか。ゲンミツに議論するとどうなるんだろうな

2010-11-06 17:28:28
都元ダイスケ🍅 @daisuke_m

@ashigeru 「第一級」のイメージは分かるんだけど、理解した、と自身を持てるほどじゃない。 「ファーストクラスオブジェクト」とか言うよね。 http://tinyurl.com/5z4ayz

2010-11-06 17:28:35
Suguru ARAKAWA @ashigeru

@daisuke_m まあ、とりあえずは「それ単体を変数に保存できるかどうか」で判断するくらいでいいかと>ファーストクラス。Javaはそれができない。

2010-11-06 17:31:27
なぎせ ゆうき @nagise

やっぱ一度LISPとかSmalltalkとかHaskellとかやっとかないといかんかなあ

2010-11-06 17:33:03
Takuma SHIRAISHI @ts7i

Generics と型の件、誰か Togetter 頼む…。

2010-11-06 17:34:39
なぎせ ゆうき @nagise

問題はモチベーションなんだよね。プログラミングの道具として使おうというわけではなくて、型システムやオブジェクト指向の理解を深めるために学ぼうという間接的なものだからあんまりプログラミングしようという気が起きず。そして、触らないからよく理解出来ないという

2010-11-06 17:34:52
都元ダイスケ🍅 @daisuke_m

covariantとcontravariantはセットだということが分かった。あれ、nonvariantも仲間かな?

2010-11-06 17:35:48
都元ダイスケ🍅 @daisuke_m

ん、変化しないと invariant かな? nonvariantじゃなくて。 http://tinyurl.com/24pt898

2010-11-06 17:37:12
Suguru ARAKAWA @ashigeru

@daisuke_m 前の話題だけど、invariantは型のほうの話題じゃなくて、オブジェクトがどのように変化したとしても、それだけは変わらない、というオブジェクトの性質ね。やっぱり2つ以上の性質の関連を言っている。オブジェクト自体が変わらない、という性質はimmutable

2010-11-06 17:37:25
都元ダイスケ🍅 @daisuke_m

subtype / covariant / contravariant - soutaroにっき http://htn.to/tZpFWf

2010-11-06 17:37:41
Suguru ARAKAWA @ashigeru

@daisuke_m non-variantは、どちらかというと「変わってはならない」というco-やcontra-と対比して制限を表すニュアンスかねぇ。invariantはもともと「不変式」の意味で使われてるから、ちょっと違うかな。

2010-11-06 17:39:32
都元ダイスケ🍅 @daisuke_m

@ashigeru invariantは不変条件。それは覚えてる。こいつはcovariantとかcontravariantとかとは、ほぼ別次元の人ってことか。

2010-11-06 17:40:53