Scala の Enumeration について

@kmizu さんと @keisuke_n さんの Enumeration についての議論. @NetPenguin さんと @yasushia さんもちょっと関わっていたので発言を載せてあります.
2
前へ 1 ・・ 5 6 8 次へ
📙🔭✨NISHIMOTO Keisuke @keisuke_n

Javaのenumが△なのは、主に記述が冗長なこと。でも型を自分で拡張できるから便利なのは確か。

2010-06-05 11:37:25
📙🔭✨NISHIMOTO Keisuke @keisuke_n

結局根本的にenumの意義はどこにあるのか、という話だと思う。

2010-06-05 11:38:32
Yasushi Abe @yasushia

@keisuke_n これSignal.Greenじゃないのはこう書きたい、という例ですか?

2010-06-05 11:38:54
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@yasushia まぁ定数はいろんな場所で使うから。Signal.Greenではなく、Greenとして扱いたい。名前空間を分けたい人はもちろんわけてください、というスタンスかな。

2010-06-05 11:42:43
kmizu @kmizu

@keisuke_n Javaのenumとだけ比較しているのではない、という点については了解しました。それで、改めて聞くと、先ほどのgistに貼り付けた例で、思った通りの型付けになっていないのはどの部分でしょうか?

2010-06-05 11:45:55
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu 型付けの話で理想的なのは、sealedほげのような明示的な型になってほしいということでしょうか。ここには完全な定数という意味も含まれています。

2010-06-05 11:55:10
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu EnumerationやValueには便利なユーティリティメソッドがついていて、それがEnumerationの枠組みで共通して使える点は、利点だと思います。でもあんまりいらないかなと思うこともありますね。ああでもIteratorとして帰るのは欲しいかも...。

2010-06-05 11:56:55
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu Enumerationが定数じゃないというのは先ほど言ったとおりタイミングによって不具合が発生する(たぶん生成順番)問題、静的にバイトコードに埋め込んでくれない、関連クラス数の増加、シリアライズや比較での不具合、などなどからです。

2010-06-05 12:01:22
kmizu @kmizu

@keisuke_n その、明示的な型、というのがよくわからないんです。というのはさっきも似たような事書きましたが。.Valueを書かなくて良い、とかいう記法の話ではないんですよね?あと、定数かどうかと型付けの話は別問題なので混ぜるべきではないと思います。

2010-06-05 12:35:21
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu いや定数と型についてはまぜないといけないと思ってます(ほとんどは文法ではなくて運用上の問題なため)。たぶんそこらへんが考察の仕方がちがうところかと。

2010-06-05 12:36:38
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu 明示的な型は、Signal(信号機型)のように自分で自由の利く型を作れるかどうかです。

2010-06-05 12:39:06
📙🔭✨NISHIMOTO Keisuke @keisuke_n

というかsealedにしてるのは型と定数の両方がかなっているからなんで、切り離して考えちゃダメなんです。

2010-06-05 12:40:14
📙🔭✨NISHIMOTO Keisuke @keisuke_n

まぁ熊楠的な論理展開だけどな。

2010-06-05 12:40:39
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu enumの本質はどこですか?たぶん型であり定数であることだと思うのです。

2010-06-05 12:42:10
📙🔭✨NISHIMOTO Keisuke @keisuke_n

つまりEnumerationはenumではないんだよね。

2010-06-05 12:42:49
📙🔭✨NISHIMOTO Keisuke @keisuke_n

sealedほげの欠点は列挙型ではないので、IteratorなりIterableなりを伴わないこと。その場合はいちいちSeqなどのセットに入れる必要がある。

2010-06-05 12:44:27
📙🔭✨NISHIMOTO Keisuke @keisuke_n

名前空間は言語によってうまく処理されているので、むしろ発展した言語では名前空間で明示的に分離しないenum型はありえる、って話ね。

2010-06-05 12:50:11
📙🔭✨NISHIMOTO Keisuke @keisuke_n

まぁこのあたりはいろんな言語を触ればわかるはずなんで、あえて言うことでもないと思ってたんだけど。

2010-06-05 12:51:15
📙🔭✨NISHIMOTO Keisuke @keisuke_n

私が提案しているのは、名前空間を明示的に書かなくてもいいenum型もあっていいだろって話。もちろん名前空間も書きたければ書けるという前提(既にPOST済み)

2010-06-05 12:52:28
📙🔭✨NISHIMOTO Keisuke @keisuke_n

特にScalaなどの言語は如何に書かなくてもいいのかにも挑戦しているわけだし、見てすぐわかる定数に対していちいち名前空間も記述しなくちゃいけない苦痛は解放してもいいと思う。

2010-06-05 12:54:01
📙🔭✨NISHIMOTO Keisuke @keisuke_n

とにかくenumは定数で手軽なものを理想と思うので、ややこしいことは避けておきたい。名前空間の件もそうだし...。このあたりうまく説明できてないのかもしれないけど。

2010-06-05 12:58:15
kmizu @kmizu

@keisuke_n いや、どちらも考察するとしても、問題としては切り分けないと議論がごちゃごちゃになって話が進まないので困ります。

2010-06-05 12:59:44
kmizu @kmizu

@keisuke_n enumの本質は、端的に言うと「有限個の(名前で指定される)要素だけをその値として持つような型」でしょう。型であり定数である、というのはどういう意味でしょうか?

2010-06-05 13:01:24
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu 同意できるところは有限個の要素だけかも。これに定数は必須です。少なくとも欲しいのはそれであってそれ以外なら別にEnumerationである必要はないかも。

2010-06-05 13:03:14
kmizu @kmizu

@keisuke_n Signal(信号機型)にはどのような定義が必要ですか?それがわからないので、なんとも言えないです。しつこかったらすいませんけど、論点が曖昧模糊としている(ように見える)ので、焦点が正直よくわからないんです。

2010-06-05 13:03:20
前へ 1 ・・ 5 6 8 次へ