Javaのenumが△なのは、主に記述が冗長なこと。でも型を自分で拡張できるから便利なのは確か。
2010-06-05 11:37:25@yasushia まぁ定数はいろんな場所で使うから。Signal.Greenではなく、Greenとして扱いたい。名前空間を分けたい人はもちろんわけてください、というスタンスかな。
2010-06-05 11:42:43@keisuke_n Javaのenumとだけ比較しているのではない、という点については了解しました。それで、改めて聞くと、先ほどのgistに貼り付けた例で、思った通りの型付けになっていないのはどの部分でしょうか?
2010-06-05 11:45:55@kmizu 型付けの話で理想的なのは、sealedほげのような明示的な型になってほしいということでしょうか。ここには完全な定数という意味も含まれています。
2010-06-05 11:55:10@kmizu EnumerationやValueには便利なユーティリティメソッドがついていて、それがEnumerationの枠組みで共通して使える点は、利点だと思います。でもあんまりいらないかなと思うこともありますね。ああでもIteratorとして帰るのは欲しいかも...。
2010-06-05 11:56:55@kmizu Enumerationが定数じゃないというのは先ほど言ったとおりタイミングによって不具合が発生する(たぶん生成順番)問題、静的にバイトコードに埋め込んでくれない、関連クラス数の増加、シリアライズや比較での不具合、などなどからです。
2010-06-05 12:01:22@keisuke_n その、明示的な型、というのがよくわからないんです。というのはさっきも似たような事書きましたが。.Valueを書かなくて良い、とかいう記法の話ではないんですよね?あと、定数かどうかと型付けの話は別問題なので混ぜるべきではないと思います。
2010-06-05 12:35:21@kmizu いや定数と型についてはまぜないといけないと思ってます(ほとんどは文法ではなくて運用上の問題なため)。たぶんそこらへんが考察の仕方がちがうところかと。
2010-06-05 12:36:38@kmizu 明示的な型は、Signal(信号機型)のように自分で自由の利く型を作れるかどうかです。
2010-06-05 12:39:06というかsealedにしてるのは型と定数の両方がかなっているからなんで、切り離して考えちゃダメなんです。
2010-06-05 12:40:14sealedほげの欠点は列挙型ではないので、IteratorなりIterableなりを伴わないこと。その場合はいちいちSeqなどのセットに入れる必要がある。
2010-06-05 12:44:27名前空間は言語によってうまく処理されているので、むしろ発展した言語では名前空間で明示的に分離しないenum型はありえる、って話ね。
2010-06-05 12:50:11まぁこのあたりはいろんな言語を触ればわかるはずなんで、あえて言うことでもないと思ってたんだけど。
2010-06-05 12:51:15私が提案しているのは、名前空間を明示的に書かなくてもいいenum型もあっていいだろって話。もちろん名前空間も書きたければ書けるという前提(既にPOST済み)
2010-06-05 12:52:28特にScalaなどの言語は如何に書かなくてもいいのかにも挑戦しているわけだし、見てすぐわかる定数に対していちいち名前空間も記述しなくちゃいけない苦痛は解放してもいいと思う。
2010-06-05 12:54:01とにかくenumは定数で手軽なものを理想と思うので、ややこしいことは避けておきたい。名前空間の件もそうだし...。このあたりうまく説明できてないのかもしれないけど。
2010-06-05 12:58:15@keisuke_n enumの本質は、端的に言うと「有限個の(名前で指定される)要素だけをその値として持つような型」でしょう。型であり定数である、というのはどういう意味でしょうか?
2010-06-05 13:01:24@kmizu 同意できるところは有限個の要素だけかも。これに定数は必須です。少なくとも欲しいのはそれであってそれ以外なら別にEnumerationである必要はないかも。
2010-06-05 13:03:14@keisuke_n Signal(信号機型)にはどのような定義が必要ですか?それがわからないので、なんとも言えないです。しつこかったらすいませんけど、論点が曖昧模糊としている(ように見える)ので、焦点が正直よくわからないんです。
2010-06-05 13:03:20