
Scalaについてはtraitとか構造型についていろいろ聞いてみたいことがあるんだけどとても140文字では表せないな…。まあ、スタイルというか定石とかがどうなってるのか知りたい系の話だけど。
2011-10-24 01:31:09
なんか実装継承するケースばかりを見かけるのたけど、型を定義するためにtraitを使うとか、すべてのクラスはなんらかのtraitを型として持つべきだ派とか、あるいは逆に、すべての引数は理由がない限り構造的部分型にすべき派とか、そういう話はないんだろうか的な疑問。
2011-10-24 01:34:22
あるいはあるクラスを受け取ると定義されている関数に、その型ではないけど事実上その方として振る舞える別の型のオブジェクトを、なんらかの方法で渡すことが可能なので、関数インタフェースは具象型でも問題がないのだ、とかいう話でもアリ。
2011-10-24 01:35:36
あんまり広くコードを見てないので偏ってるだけなんかもしれんけど、メソッドインタフェースがtraitでも構造的部分型でもなく、明確な具象型になってるコートが散見されるので、あとから困らないのだろうかとかの疑問を感じている次第。単に、サンプルコード的なもの扱いで、はしょってるのかも。
2011-10-24 01:37:31
少なくともJavaでは、メソッドインタフェースが具象型であったためにあとから後悔することってたくさんあるので、そのような「あとで後悔する」ことに対する対策というのは、(なにせJavaからScalaに行く人も多いわけで)なにかされてるんじゃないかと思ってるのだけど。
2011-10-24 01:40:55
私の知識の範囲では、メソッドインタフェースではなるべくtraitを使うか、構造的部分型を使う、くらいしか思いつかない。構造的部分型は遅い、とかいう話を昔聞いたことがあるけど、もう大分たつから、いまはどうなんかなー
2011-10-24 01:42:12
そう言えばやのさんの言うとおり、 Scala ではあんまりメソッドインターフェイスを trait にしなきゃって強く意識はしてないな。Java に比べて。何でだろう?
2011-10-24 01:50:03
でも確かに List 使うよりは LinearSeq 使うべきだよな。なんか違うところに気を取られててそこまで注意が回ってないだけか?
2011-10-24 01:55:21
設定ファイルはインタフェースを定義して、それを実装するクラスをJVM系の好きなものでテキストファイルに書いてもらって、scripting APIでコンパイルしたらよくね?
2011-10-24 01:56:52
後悔して大幅に作りなおしたとしても、、べつにScalaならたいした手間じゃないから、っていう個人的感覚。いちいちインターフェース作るのめんどい。Javaの経験がそれほどないから、ちゃんとインターフェースをつくるJavaっぽい設計に慣れていないっていうのはあるけど
2011-10-24 01:57:14
ポリモーフィックに動作を切り替えたい場合に、Javaみたいな interface と実装でのポリモーフィズムと型クラスによるポリモーフィズムっていう複数の選択肢があるってのも関係してくるかな?
2011-10-24 02:01:27
どちらかというとDIコンテナみたいなものがないからとか、そういう理由な気がする。JavaでもDIが出てくるまではそこまでインターフェースマンセーでもなかったような。
2011-10-24 02:02:11
.@t_yano 少なくとも「すべての引数は理由がない限り構造的部分型にすべき派」は皆無だとおもいますね。あれは、内部でリフレクション使うから遅いらしいですし。遅いからScala自体のコンパイラ内部でも基本的に使わなくなってるし
2011-10-24 02:03:14
@xuwei_k それは、自分の作ったプログラムを、自分でない誰かが使う(ライブラリとかそんなの)ケースは含まれてない話ということでいいでしょうか。
2011-10-24 02:04:27
まーもともと疑問に思ったのは、Scalaも2.9.1までいって、たくさんのライブラリも出てきているので、なんか「よその人に使ってもらうとき向けの抽象化」テクニックみたいなのも、定石みたいなもので発達してるんだろうなとか予想したから。
2011-10-24 02:07:30
あと考えられるのは、上限下限+総称型(共変反変も)をがしがしつかい、多くのケースで、実際に型を指定するのは、ライブラリ作成者側ではなく、ユーザ側になっている、という仮説。
2011-10-24 02:08:26
@t_yano そうですね、一人で作ってる場合はそんな感覚です。ちゃんとしたライブラリの場合は、ある程度インターフェースっぽいtraitをつくる場合もあると思いますよ。ただ、全体的にJavaと比べてインターフェースっぽいtraitをつくる習慣がないのも事実かも
2011-10-24 02:10:02
んで、Scalaの場合、ユーザ側が総称型に型を指定する場合、明確に型を書くよりも、型推論に拠るケースがおおいと思うので、あまり意識せずにすんでいるのか?という仮説。んでも、それほどScala使い込んでるわけでもないので、それで多くのケースをカバーできるのかはまだ疑問。
2011-10-24 02:12:28
べつにライブラリ自体のversion変わるごとにAPIのインターフェースがドラスティックに変わってもいいから、それよりとにかく機能豊富で速いやつをガンガン開発して欲しいとか思ってる
2011-10-24 02:12:52
しょうがないなぁ・・とゅぎゃりますかね・・・(´・ω・`) RT @tototoshi なんかおもしろい話展開されてるけど眠すぎなので誰かあとでまとめといてくださいねっ!
2011-10-24 02:14:52